poj 3974 Palindrome
2013-04-24 12:40
176 查看
最长回文子串模板 (Manacher算法,时间复杂度O(n))
#include <iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int MAX=1000005; int p[MAX<<1],len; char s[ MAX],str[MAX<<1]; inline int min(int a,int b) { return a<b?a:b; } void pk() { int i; int mx=0; int id; for(i=1;i<len;i++) { if(mx>i) { p[i]=min(p[2*id-i],mx-i); } else p[i]=1; while (str[i+p[i]] == str[i-p[i]]) p[i]++; if(p[i]+i>mx) { mx=p[i]+i; id=i; } } } int main() { int i,max,cont=1; while(scanf("%s",s)!=EOF,strcmp(s,"END")) { len=strlen(s); str[0]='$';str[1]='#'; for(i=0;i<len;i++) { str[(i<<1)+2]=s[i]; str[(i<<1)+3]='#'; } len=(len<<1)+2; str[len]='\0'; //cout<<str<<endl; pk(); max=0; for(i=0;i<len;i++) { if(p[i]>max) max=p[i]; } printf("Case %d: %d\n",cont++,max-1); } return 0; }
相关文章推荐
- POJ-3974-Palindrome- Manacher 马拉车算法(On寻找最长回文串)
- POJ 3974 Palindrome(最大回文串长度 Manacher算法)
- poj3974_Palindrome_
- POJ3974——Palindrome
- POJ 3974 Palindrome
- POJ-3974 Palindrome(manacher算法)
- POJ 3974 Palindrome
- POJ3974 Palindrome
- poj 3974 Palindrome 【最长连续回文子串,Manacher算法】
- POJ-3974 Palindrome
- POJ 3974 Palindrome ( Largest Palindrome substring )
- 【POJ 3974】Palindrome
- POJ 3974 Palindrome(manacher)
- POJ - 3974 Palindrome(manacher)
- poj 3974 Palindrome
- poj3974 Palindrome(manacher)
- POJ 3974 - Palindrome(manacher)
- POJ 3974 Palindrome
- POJ 3974 Palindrome (Manacher算法)
- 【manacher算法】POJ 3974 Palindrome