manacher算法

来源:互联网 发布:韩国网络双人男女主播 编辑:程序博客网 时间:2024/06/05 05:41
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <algorithm>using namespace std;typedef long long ll;const int maxn=1e5+10;char s0[maxn];char s[maxn<<2];int p[maxn<<2];int main(){#ifdef LOCAL    freopen("input.in","r",stdin);//    freopen("output.in","w",stdout);#endif    scanf("%s",s0);    int len= strlen(s0);    for(int i=len;i>=1;i--)    {        s[2*i+1]='#';        s[2*i]=s0[i-1];    }    s[0]='@';    s[1]='#';//    printf("%s\n",s);    int mx=0,id=0,ans=0;    len=strlen(s);    for(int i=1;i<len;i++)    {//        cout<<id<<" "<<mx<<" "<<ans<<endl;        if(mx>i) p[i]=min(p[id*2-i],mx-i);        else p[i]=1;        while(s[i+p[i]]==s[i-p[i]]) p[i]+=1;        if(mx<p[i]+i)        {            id=i;            mx=p[i]+i;        }        ans=max(ans,p[i]-1);    }//    for(int i=0;i<len;i++) printf("%d ",p[i]);    printf("%d\n",ans);    return 0;}

0 0
原创粉丝点击