zoukankan      html  css  js  c++  java
  • 【Manacher算法】求最长回文串的优秀算法

    先贴一下代码~

    //by 减维
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<queue>
    #include<cstdlib>
    #include<ctime>
    #include<cmath>
    #include<algorithm>
    #define ll long long
    #define maxn
    using namespace std;
    
    char s[10000015],a[10000015];
    int nxt[10000015],mr,pos,ans;
    
    int main()
    {
        char ch=getchar();
        a[0]='#';a[1]='#';
        gets(s+1);int ls=strlen(s+1);
        for(int i=1;i<=ls;++i)a[i*2]=s[i],a[i*2+1]='#';int n=ls*2+2;
        for(int i=1;i<=n;++i){
            if(mr>i)nxt[i]=min(nxt[2*pos-i],mr-i);
            else nxt[i]=1;
            while(a[i-nxt[i]]==a[i+nxt[i]])nxt[i]++;
            if(i+nxt[i]>mr)mr=i+nxt[i],pos=i;
            ans=max(ans,nxt[i]-1);
        }
        printf("%d",ans);
    }
  • 相关阅读:
    Uva10305(dfs)
    Uva572
    Uva122
    Uva679
    Uva136
    Uva489
    Uva133
    Uva1339
    Uva1588
    《世纪的哭泣》读后感 读书笔记
  • 原文地址:https://www.cnblogs.com/rir1715/p/7683188.html
Copyright © 2011-2022 走看看