作者:
dys
,
2021-01-15 22:00:06
,
阅读 18
#include<bits/stdc++.h>
using namespace std;
const int N = 4e7+10;
char a[N],b[N];
int p[N];
int len;
void init(){
int k = 0;
b[k++] = '$';
b[k++] = '#';
for(int i=0;i<len;i++){
b[k++] = a[i];
b[k++] = '#';
}
b[k++] = '^';
len = k;
}
void manacher(){
int mr = 1,mid;
for(int i=0;i<len;i++){
if(i < mr) p[i] = min(p[2*mid-i],mr-i);
else p[i] = 1;
while(b[i-p[i]] == b[i+p[i]]) p[i]++;
if(i + p[i] > mr){
mr = i + p[i];
mid = i;
}
}
}
int main(){
scanf("%s",a);
len = strlen(a);
init();
manacher();
int ans = 0;
for(int i=0;i<len;i++) ans = max(ans,p[i]);
cout<<ans - 1<<endl;
return 0;
}