Advertisement
slash0t

z function

Aug 2nd, 2024
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.35 KB | None | 0 0
  1. vector<int> zz(string s) {
  2.     int n = s.length();
  3.     vector<int> z(n);
  4.     z[0] = n;
  5.     int start = 0, end = 0;
  6.  
  7.     for (int i = 1; i < n; i++) {
  8.         z[i] = max(0ll, min(z[i - start], end - i));
  9.  
  10.         while (i + z[i] < n && s[i + z[i]] == s[z[i]]) {
  11.             z[i]++;
  12.         }
  13.  
  14.         if (z[i] + i - 1 > end) {
  15.             end = z[i] + i - 1;
  16.             start = i;
  17.         }
  18.     }
  19.  
  20.     return z;
  21. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement