题目链接:https://www.luogu.com.cn/problem/P3805
#include<bits/stdc++.h>
using namespace std;
const int N=1e3;
int n,p[2*N+2];
char s[N+2],t[2*N+3];
void manacher(){
n=strlen(s+1);
int m=0;
t[++m]='$';
for(int i=1;i<=n;i++) t[++m]=s[i],t[++m]='$';
int M=0,R=0;
for(int i=1;i<=m;i++){
if(i>R) p[i]=1;
else p[i]=min(p[2*M-i],R-i+1);
while(i-p[i]>0&&i+p[i]<=m&&t[i-p[i]]==t[i+p[i]]) p[i]++;
if(i+p[i]-1>R) M=i,R=i+p[i]-1;
}
int ans=0;
for(int i=1;i<=m;i++) ans=max(ans,p[i]);
cout<<ans-1;
}
int main(){
cin>>s+1;
manacher();
}