manachar
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了manachar相关的知识,希望对你有一定的参考价值。
#include <bits/stdc++.h> using namespace std; char str[20005],str1[40005],len=0; int p[40005]; int manachar(){ int id=0,maxn=0,ans=0,j=1; str1[0]=‘@‘; for(int i=0;i<=len;i++){ str1[j++]=str[i]; str1[j++]=‘#‘; } str1[j]=0; for(int i=0;i<j;i++){ if(i<maxn) p[i]=max(maxn-i,p[2*id-i]); else p[i]=1; while(str1[i+p[i]]==str1[i-p[i]]) p[i]++; if(p[i]+i>maxn){ maxn=p[i]+i; id=i; } ans=max(ans,p[i]); } return ans-1; } int main(){ while((str[len]=getchar())!=EOF)len++; len--; cout<<manachar(); return 0; }
以上是关于manachar的主要内容,如果未能解决你的问题,请参考以下文章
hdu 3613 Best Reward (manachar算法)
UVA 11888 - Abnormal 89's(Manachar)