Advertisement
_no0B

Untitled

Mar 2nd, 2020
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.57 KB | None | 0 0
  1. /// manachar
  2. int pal[N];
  3. char s[N];
  4. void manach(char *str){
  5.     int i, now = 0;
  6.     for(i = 0; str[i]!='\0'; i++){
  7.         s[2*i] = str[i];
  8.         s[2*i + 1] = '#';
  9.     }
  10.     s[2*i-1] = '\0';
  11.     pal[0] = 0;
  12.     for(i = 1; s[i]!='\0'; i++){
  13.         pal[i] = max(0,min(pal[now]-(i-now),pal[now-(i-now)])) + 1;
  14.         while(i-pal[i]>=0 && s[i+pal[i]]==s[i-pal[i]]) pal[i]++;
  15.         pal[i]--;
  16.         if(i+pal[i]>now+pal[now]) now = i;
  17.     }
  18.     for(i = 0; s[i]!='\0'; i++){
  19.         if(s[i]=='#') pal[i] = (pal[i]+1)/2;
  20.         else pal[i] = pal[i]/2;
  21.     }
  22. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement