题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/041e572ca81414f424a52b10a3e36380.png)
Manacher
#include<bits/stdc++.h>
using namespace std;
const int N=110000+5;
char str[N],s[N<<1];int len[N<<1];
int main(){
while(~scanf("%s",str+1)){
int n=strlen(str+1);s[0]='@';
for(int i=1;i<=2*n;i+=2) s[i]='#',s[i+1]=str[(i+1)>>1];
s[2*n+1]='#',s[2*n+2]='$',s[2*n+3]='\0';
int mx=0,po=0,ans=0;
for(int i=1;i<=2*n;++i){
(mx>i)?(len[i]=min(mx-i+1,len[2*po-i])):(len[i]=1);
while(s[i-len[i]]==s[i+len[i]]) ++len[i];
if(i+len[i]-1>mx) mx=i+len[i]-1,po=i;
ans=max(ans,len[i]-1);
}
printf("%d\n",ans);
}
}