Advertisement
Guest User

z, pref func

a guest
Dec 18th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.59 KB | None | 0 0
  1. def pref(s):
  2. n = len(s)
  3. p = [0] * n
  4. for i in range(1, n):
  5. x = i - 1
  6. while (x > 0) and (s[p[x]] != s[i]):
  7. x = p[x]
  8. if (s[i] == s[p[x]]):
  9. p[i] = p[x] + 1
  10. print(*p)
  11.  
  12. def zf(s):
  13. n = len(s)
  14. z = [0] * n
  15. L = 0
  16. R = 0
  17. for i in range(1, n):
  18. if (i >= R) or (i + z[i - L] >= R):
  19. L = i
  20. R = max(R, i)
  21. while (R < n) and (s[R] == s[R - i]):
  22. R += 1
  23. z[i] = R - L
  24. else:
  25. z[i] = z[i - L]
  26. print(*z)
  27.  
  28.  
  29.  
  30. s = input()
  31. zf(s)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement