Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- vector<int> Zfunction(string& s) {
- int n = (int) s.size();
- vector<int> z(n, 0);
- z[0] = n;
- int l = 0, r = 0;
- for (int i = 1; i < n; ++i) {
- if (i > r) {
- int j = i;
- while (s[j] == s[j - i]) {
- ++z[i];
- ++j;
- }
- if (z[i] > 0)
- l = i, r = j - 1;
- } else {
- if (i + z[i - l] >= r) {
- z[i] = r - i + 1;
- int j = r + 1;
- while (s[j] == s[j - i]) {
- ++j;
- ++z[i];
- }
- if (z[i] > 0)
- l = i, r = j - 1;
- } else {
- z[i] = z[i - l];
- }
- }
- }
- return z;
- }
- int main()
- {
- string s;
- cin >> s;
- vector<int> res = Zfunction(s);
- for (int e : res)
- cout << e << " ";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement