给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.
字符串长度为n
一行小写英文字符a,b,c...y,z组成的字符串S
一个整数表示答案
aaa
3
字符串长度len <= 11000000
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<queue> using namespace std; char data[22000666]; int p[22000666],cnt,ans; void read(){ char c=getchar(); data[0]=‘~‘,data[cnt=1]=‘|‘; while(c<‘a‘||c>‘z‘){ c=getchar(); } while(c>=‘a‘&&c<=‘z‘){ data[++cnt]=c; data[++cnt]=‘|‘; c=getchar(); } } int main(){ read(); for(int t=1,r=0,mid=0;t<=cnt;++t){ if(t<=r){ p[t]=min(p[mid*2-t],r-t+1); } while(data[t-p[t]]==data[t+p[t]]){ p[t]++; } if(p[t]+t>r){ r=p[t]+t-1,mid=t; } if(p[t]>ans){ ans=p[t]; } } printf("%d",ans-1); return 0; }
原文:https://www.cnblogs.com/xiongchongwen/p/11861979.html