#include<bits/stdc++.h>
#define ll long long
using namespace std;
char temp[1500],s[4000];
int cnt[4000];
int manacher()
{
int l=strlen(temp+1);
int t=0;
s[t++]='@';
s[t++]='#';
for(int i=1;i<=l;++i)
{
s[t++]=temp[i];
s[t++]='#';
}
s[t]='\0';
int mx=0,pos=0,ans=0;
for(int i=1;i<t;++i)
{
if(mx>i) cnt[i]=min(cnt[2*pos-i],mx-i);
else cnt[i]=1;
while(s[i-cnt[i]]==s[i+cnt[i]])
cnt[i]++;
if(cnt[i]+i>mx)
{
pos=i;
mx=cnt[i]+i;
}
ans=max(ans,cnt[i]);
}
return ans-1;
}
int main()
{
while(cin>>temp+1)
cout<<manacher()<<endl;
}
详解链接:
添加链接描述