Advertisement
a_pramanik

zlago

Sep 28th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.75 KB | None | 0 0
  1. string a;
  2. int z[cf], len;
  3.  
  4. void zzz()
  5. {
  6.     mem(z, 0);
  7.     int right, left, i;
  8.     len = a.size();
  9.  
  10.     right=left=0;
  11.     z[0]=len;
  12.     for(i=1; i<len; i++){
  13.         if(i>right){
  14.             right=left=i;
  15.  
  16.             while(right<len && a[right]==a[right-left]){
  17.                 right++;
  18.             }
  19.             z[i]=right-left;
  20.             right--;
  21.  
  22.         }
  23.         else{
  24.  
  25.             int xx = i-left;
  26.             if(z[xx]<(right-i+1)){
  27.                 z[i]=z[xx];
  28.             }
  29.             else{
  30.  
  31.                 left=i;
  32.  
  33.                 while(right<len && a[right]==a[right-left]){
  34.                     right++;
  35.                 }
  36.                 z[i]=right-left;
  37.                 right--;
  38.  
  39.             }
  40.  
  41.         }
  42.     }
  43.  
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement