Manacher讲解https://subetter.com/algorithm/manacher-algorithm.html
上面的模板里的id没有初始化,应该初始化为0
模板题:https://vjudge.net/problem/HDU-3068
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=110005;
char s[N];
char a[N*2];
int p[N*2];
void manacher(char s[],int len){
int l=0;
a[l++]='$';
a[l++]='#';
for(int i=0;i<len;i++){
a[l++]=s[i];
a[l++]='#';
}
a[l]=0;
int mx=0,id=0;
for(int i=0;i<l;i++){
p[i]=mx>i?min(p[2*id-i],mx-i):1;
while(a[i+p[i]]==a[i-p[i]]) p[i]++;
if(i+p[i]>mx){
mx=i+p[i];
id=i;
}
}
}
int main(){
while(~scanf("%s",s)){
int len=strlen(s);
manacher(s,len);
int ans=0;
for(int i=0;i<2*len+2;i++){
ans=max(ans,p[i]-1);
}
printf("%d\n",ans);
}
return 0;
}