<span style="font-size:18px;">//第一次学到这种算法,算法分析和代码实现参考了博客: http://blog.csdn.net/xingyeyongheng/article/details/9310555 很详细</span>
<span style="font-size:18px;">#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=110005;
char str[maxn],s[maxn*2];
int p[maxn*2];
int main()
{
int len,i,k,id,maxlen;
while(scanf("%s",str)!=EOF)
{
len=strlen(str);
id=maxlen=0;
s[0]='$';
s[1]='#';
k=2;
for(i=0;i<len;i++)
{
s[k++]=str[i];
s[k++]='#';
}
for(i=2;i<=2*len;i++)
{
if(p[id]+id>i)p[i]=min(p[2*id-i],p[id]+id-i);
else p[i]=1;
while(s[i-p[i]]==s[i+p[i]])++p[i];
if(id+p[id]<i+p[i])id=i;
if(maxlen<p[i])maxlen=p[i];
}
printf("%d\n",maxlen-1);
}
return 0;
}
</span>