标签:
Input
Output
Sample Input
Sample Output
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> using namespace std; const int N=120005; int p[2*N]; char s[2*N],str[2*N]; int n; void kp() { int mx=0; int id; ///for(i=n;str[i]!=0;i++) ///str[i]=0; ///没有这一句有问题,就过不了ural1297,比如数据:ababa aba; for(int i=1;i<n;i++) { if(mx>i) p[i]=min(p[2*id-i],p[id]+id-i); else p[i]=1; for( ;str[i+p[i]]==str[i-p[i]];p[i]++); if(p[i]+i>mx) { mx=p[i]+i; id=i; } } } void init() { str[0]=‘$‘; str[1]=‘#‘; for(int i=0;i<n;i++) { str[i*2+2]=s[i]; str[i*2+3]=‘#‘; } n=n*2+2; s[n]=0; } int main() { while(scanf("%s",&s)!=EOF) { n=strlen(s); init(); kp(); int tmp=0; for(int i=1;i<n;i++) if(p[i]>tmp) tmp=p[i]; printf("%d\n",tmp-1); } return 0; }
标签:
原文地址:http://www.cnblogs.com/chen9510/p/5426636.html