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;
}