尽量找了个字符串里面最简单的部分来入门
发现并没想象中的简单...
模板:
int p[N]; //s,n均为插入过#的 返回最长回文串长度 int manacher(char *s,int n) { int mx=0,id=0,res=0; for(int i=1;i<=n;i++) { p[i]=(mx>i?min(p[2*id-i],mx-i):1); while(i-p[i]>=1 && i+p[i]<=n && s[i-p[i]]==s[i+p[i]]) p[i]++; res=max(res,p[i]-1); if(i+p[i]>mx) mx=i+p[i],id=i; } return res; }