Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string.h>
- using namespace std;
- int Manacher[100005], maxlen, maxpos;
- char v[100005];
- void Build_Manacher (int n)
- {
- int mij = 0;
- for (int i = 1; i <= n; ++i )
- {
- if (i > mij+Manacher[mij])
- {
- while (v[i+Manacher[i]+1] == v[i-Manacher[i]-1] && i - Manacher[i] > 1 && i + Manacher[i] < n )
- ++Manacher[i];
- mij = i;
- }
- else
- {
- Manacher[i] = min ((mij+Manacher[mij])-i, Manacher[mij - (i-mij)]);
- while ( v[i+Manacher[i]+1] == v[i-Manacher[i]-1] && i-Manacher[i] > 1 && i + Manacher[i] < n )
- ++Manacher[i];
- if (mij+Manacher[mij] <= i+Manacher[i])
- mij = i;
- }
- cout<<(Manacher[i]*2+1)<<" ";
- }
- }
- int main()
- {
- cin >> (v+1);
- int n = strlen (v+1);
- Build_Manacher(n);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement