Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def pref(s):
- n = len(s)
- p = [0] * n
- for i in range(1, n):
- x = i - 1
- while (x > 0) and (s[p[x]] != s[i]):
- x = p[x]
- if (s[i] == s[p[x]]):
- p[i] = p[x] + 1
- print(*p)
- def zf(s):
- n = len(s)
- z = [0] * n
- L = 0
- R = 0
- for i in range(1, n):
- if (i >= R) or (i + z[i - L] >= R):
- L = i
- R = max(R, i)
- while (R < n) and (s[R] == s[R - i]):
- R += 1
- z[i] = R - L
- else:
- z[i] = z[i - L]
- print(*z)
- s = input()
- zf(s)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement