51nod 1088 最长回文子串

来源:互联网 发布:二维数组去除重复 编辑:程序博客网 时间:2024/06/05 03:00
#include <bits/stdc++.h>using namespace std;const int MAXN=200100;char a[MAXN],s[MAXN];int f[MAXN],n,ans;void manacher(char *a){int i,r,p,m;s[0]='$';s[1]='#';for(i=1;i<=n;i++){s[i<<1]=a[i-1];s[i<<1|1]='#';}s[(n+1)<<1]='@';m=(n+1)<<1;r=p=0;f[1]=1;for(i=2;i<m;i++){if(r>i)f[i]=min(r-i,f[p*2-i]);elsef[i]=1;for(;s[i-f[i]]==s[i+f[i]];f[i]++);if(i+f[i]>r){r=i+f[i];p=i;}}ans=0;for(i=2;i<m;i++)ans=max(ans,f[i]-1);}int main(){while(scanf(" %s",a)!=EOF){n=strlen(a);manacher(a);printf("%d\n",ans);}}

0 0
原创粉丝点击