manacher算法
#include<bits/stdc++.h> using namespace std; const int maxn=11000002; char a[maxn<<1]; int p[maxn<<1]; int cnt=1,rd,mid,ans; void read() { char c=getchar(); a[0]='~'; a[1]='|'; while(c>='a'&&c<='z') { a[++cnt]=c; a[++cnt]='|'; c=getchar(); } return; } int main() { read(); for(int i=1;i<=cnt;i++) { if(i<rd) p[i]=min(p[(mid<<1)-i],rd-i); else p[i]=1; while(a[i-p[i]]==a[i+p[i]]) p[i]++; if(p[i]+i>rd) rd=p[i]+i,mid=i; ans=max(ans,p[i]); } cout<<ans-1; }