Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def get_segment(l, r, s, c):
- v = []
- for i in range(len(s)):
- if (s[i] != c):
- continue
- v.append([l[i], r[i]])
- v.sort()
- seg = []
- it = 0
- while (it < len(v)):
- nit = it + 1
- rig = v[it][1]
- lef = v[it][0]
- while (nit < len(v) and v[nit][0] <= rig + 1):
- rig = max(rig, v[nit][1])
- nit += 1
- seg.append([lef, rig])
- it = nit
- return seg
- def rev(seg):
- if (len(seg) == 0):
- return seg
- ans = []
- ans.append([1, 1000000000])
- prev = 1
- for i in range(len(seg)):
- if (seg[i][0] != prev):
- ans.append([prev, seg[i][0]])
- prev = seg[i][1] + 1
- if (prev != 1000000000):
- ans.append([prev + 1, 1000000000])
- return ans
- def textFormatting(starting, ending, style):
- n = len(starting)
- l = starting
- r = ending
- s = style
- assert(1 <= n and n <= 100000)
- assert(len(l) == n and len(r) == n and len(s) == n)
- for i in range(n):
- assert(1 <= l[i] and l[i] <= r[i] and r[i] <= 1000000000)
- assert(s[i] == 'b' or s[i] == 'u' or s[i] == 'i')
- seg = []
- seg.append(get_segment(l, r, s, 'b'))
- seg.append(get_segment(l, r, s, 'u'))
- seg.append(get_segment(l, r, s, 'i'))
- res = 1000000000
- for a in range(2):
- for b in range(2):
- for c in range(2):
- if (a == 1 or b == 1 or c == 1):
- continue
- x = seg[0]
- if (a == 1):
- x = rev(seg[0])
- y = seg[1]
- if (b == 1):
- y = rev(seg[1])
- z = seg[2]
- if (c == 1):
- z = rev(seg[2])
- cur = len(x) + len(y) + len(z)
- q = []
- for i in x:
- q.append(i)
- for i in y:
- q.append(i)
- for i in z:
- q.append(i)
- q.sort()
- it = 0
- while (it != len(q)):
- nit = it
- while (nit < len(q) and q[nit] == q[it]):
- nit += 1
- it = nit
- cur += 1
- res = min(res, cur)
- return res
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement