poj 3974 Palindrome 裸的最长回文子串Mancher算法O(n)

来源:互联网 发布:ipad怎么传软件 编辑:程序博客网 时间:2024/06/06 08:30
//poj 3974//sep9#include <iostream>using namespace std;const int MAXN=1000024; char a[MAXN],b[2*MAXN];int p[2*MAXN];int main(){int cases=0;while(scanf("%s",a)==1&&a[0]!='E'){int i=0,j=0;b[j++]='X';b[j++]='#';while(a[i]!='\0'){b[j++]=a[i++];b[j++]='#';}memset(p,0,sizeof(p));int len=j,ids=0,mx=0;for(int i=1;i<len;++i){if(mx>i)p[i]=(p[2*ids-i]<(mx-i)?p[2*ids-i]:mx-i);elsep[i]=1;while(b[i-p[i]]==b[i+p[i]])++p[i];if(i+p[i]>mx){mx=i+p[i];ids=i;}}int maxx=0;for(int i=1;i<len;++i)maxx=max(maxx,p[i]-1);printf("Case %d: %d\n",++cases,maxx);}return 0;}

0 0