求最长回文子串长度…完了今天一下午好颓废啊…
#include<bits/stdc++.h>
using namespace std;
const int MAXN=3e5;
char str[MAXN],s[MAXN];
int p[MAXN],len1,len2;;
void init(){
str[0]='$';
str[1]='#';
for(register int i=0;i<len1;i++){
str[i*2+2]=s[i];
str[i*2+3]='#';
}
len2=len1*2+2;
str[len2]='*';
}
void manacher(){
int id=0,mx=0;
for(register int i=1;i<len2;i++){
if(mx>i) p[i]=min(p[2*id-i],mx-i);
else p[i]=1;
for(;str[i+p[i]]==str[i-p[i]];p[i]++);
if(mx<i+p[i]){mx=i+p[i];id=i;}
}
}
int main(){
while(scanf("%s",s)!=EOF){
len1=strlen(s);
init();
manacher();
int ans=0;
for(register int i=0;i<len2;i++)ans=max(ans,p[i]);
cout<<ans-1<<endl;
}
return 0;
}