Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.97 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. vector<int> Zfunction(string& s) {
  6. int n = (int) s.size();
  7. vector<int> z(n, 0);
  8. z[0] = n;
  9. int l = 0, r = 0;
  10. for (int i = 1; i < n; ++i) {
  11. if (i > r) {
  12. int j = i;
  13. while (s[j] == s[j - i]) {
  14. ++z[i];
  15. ++j;
  16. }
  17. if (z[i] > 0)
  18. l = i, r = j - 1;
  19. } else {
  20. if (i + z[i - l] >= r) {
  21. z[i] = r - i + 1;
  22. int j = r + 1;
  23. while (s[j] == s[j - i]) {
  24. ++j;
  25. ++z[i];
  26. }
  27. if (z[i] > 0)
  28. l = i, r = j - 1;
  29. } else {
  30. z[i] = z[i - l];
  31. }
  32. }
  33. }
  34. return z;
  35. }
  36.  
  37. int main()
  38. {
  39. string s;
  40. cin >> s;
  41. vector<int> res = Zfunction(s);
  42. for (int e : res)
  43. cout << e << " ";
  44. return 0;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement