疯子的算法总结(七) 字符串算法之 manacher 算法 O(N)解决回文串


有点像DP的思想,写写就会做。

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e7+5;
char a[maxn];
char s[2*maxn];
int len[maxn*2];
int manachar(char *p)
{
    int le=strlen(p);
    for(int i=0;i<le;i++)
    {
        s[i*2+2]=p[i];
        s[i*2+1]='+';
        //cout<<s[i*2+1]<<s[i*2+2];
    }
    s[0]='^',s[le*2+1]='+';//选取不可能出现的字符即可。
    //预处理字符串成为一个奇数串;
    int Max=0,pos=0,ans=0;
    le=2*le+1;
    for(int i=1;i<=le;i++)
    {
        if(Max>i)
        {
            len[i]=min(len[2*pos-i],Max-i);
        }
        else  len[i]=1;
        while(s[i-len[i]]==s[i+len[i]])len[i]++;
        ans =max(len[i],ans);
        if(i+len[i]>Max)
        {
            Max=len[i]+i;
            pos=i;
        }
    }
    return ans-1;
}
int main()
{
    int cnt=0;
    while(~scanf(" %s",a)){
        if(a[0]=='E')break;
        printf("Case %d: %d\n",++cnt,manachar(a));
        memset(a,0,sizeof(a));
    }
    return 0;
}
/*

                                                                     ..ii7vJJuJ1juJJYL7r::.
                                                                :71XPKK5IU1JjssLYLJYJJUU5SKSX1Li.
                                                           .r1KPX2Yv77r7r7r777r7r7r7r7r7r7777sJ25XUJi.
                                                        :sPPXY7r7r7r77LrvL7r7r7r7r7r7r7r7r7r7r7777vYUSKJr.              .
                                     :7ISKSX5Ur      :1bKu7777r7r7777ULr7us7777777r7r7r7r7r77777r7r77v7s2K27.      :vI5K5KSILi
                                   rS51v7777vLXg   vbqu7777r777777777rrr7r7r777r7r777r777r7r777r7r7r777r77L1qUi  .Equvv777v7u2q1i
                                 .5577777v77r7iXSvb577r7r7r7r7777777717rLjr7r77777777777r777r777r7r7r7r7r7777L5SLgv77777r7r7777YIXi
                                .qs777vu2j1Jrr2XXYrr7r77777r7r7r77v11JUJ1U1r7r7r77777r7r777r7777777r7r77777r7r7rBvr77r7r777r77777vX2
                                KY777vIi   :dP1ri7r777r777777777rvs.  7r  .2r7r7777777r7r7777777r777r77777r7r7rvZrr7rrv22UL777r7r77UK
                               rX77r72.    sbrrr7r777r77777r7r7r7ss   7i   S7r7r777r77777r77777777777777777r7r77vr7r7u1:::YSJr777777US
                               qv77775   rEuirr7r7r7777777r7r7r7r7sJvUsJsuuvr7r7r7r7r7r77777777777r7r7r7r777r7r7r7777d     .1Ur7r777rq7
                               Evr777L7rPq7r7r777r77777r7rrrrirvju2IXUII5II1u7v77r7rrr7r777r777r7777777r777r7r777r7r7S.      Yur7r7777D
                               sP7r7riXQYrr77777r7r777r7vuuJjddY77rriiiiiririEI15KuX2UL7rrr7r777r7r77777r77777r77777rv5L.    jJ7r7r7rrEi
                                2b2vrKPirr7r7r7r7r7rLuSIur.:SdY              Iv.sL :i7JISIJrrr7r7r7r777r7r7r7777777r777sSJJLIs7r77777LR
                                 .irgIirr777r7rriv1X17:.  :qiP ............. 5r.rU .   ..:Lg117rr777777777r77777r7r777r77vvL77rrrr7sSd.
                                   iXi7r777r7r7vP5r.     UZ.vv ............. S.  I .....  u7:YRJIvrr7r7r7r7r7r777777777r7r777r77YY1Ji
                                  vZi7r77777rU57g. ... :gS  X............... P:  q ..... ib:i:E::IXjr7r7r7r7r7r777r777r777777S2IUg
                                 7gr777777rLbL iv ... vRr  .P .............. P.  X..... .grr. iP  :JP17r7r7r777r777r7r7r7r7r7rrirYb
          :                     :Qr7r777rr5q. .Z .. .qX.   jv .............. E   K .... Pui.   17   .Jq2r7r7r777r7777777r7r7r7r7rrug
          B.i:                  Q777777rvbL  iBr   rQ7     P:................b   2 ... UXi.     g.... .LPjrr7r777r7r7r7777777r7r7rr1D
         iXBvL                 gY7r7r7r1d:  jPS  :bK...i.  E............... vU .:d::. sKi.      v2 .... .uKYr7r777r7r7r777r777r777772b
          i7di:s:             Yqr77r7rKX. .P1:v :Pr     . .K .............. E:. :S...Sgr.   .    D....... :IXr7r77777r777r77777r7r77rXI
             ..  r.           g7r7r7rEs  :Dv :::7         .S ............. iX   .L  2q:.         iK ....7:  rPYrr777r77777r7r7r777r7rrd7
               vrSM.         U2r7r7rE7  iZ:  rri    .     :j ............. P:   r:.K1             P:... J:.. .S5rr77777r777r777r777r7r7D.
              E1             Dr7r7rP7  i5    u.        .  :Y P:...........iK    7rIi              .E .. 1:...  Lq7r7r7r7r7777777r7r7r7rJb
              .iv7          jU7r7rI2  i1    ..        .   :rr77 ......... D    .Y.            .    57 . X...... rPvr7r7777777r7r7r7r7r7rP7
                            b777rLqi :j              .    .Iv X ........ 17              .         .Z ..q....... :qLr77777r7r7r777r7r7r7rM
                           7Sr7rrK7:.L          .   .      g. E:....... iX              . . . . .   Pr .d ....... :Pvr7r77777r777r777r77712
           7               Zr7r7jL::7.                     P  rS ......:P        .     .            :E :q ........ :P7r7777777r7r7r7r7r77rZ.
          :B7:7.          vX7r7rP.rr.                      :   E:.....:I    .     . .       .        q.iJ ......... iP7r7r7r7r7r777777777r1I
          .Qq:r7          Evr7rLI J.          .r7.             :P ...rL                .   .   .     vrr:........... L5rr77777r7r77777r7r7rD
            XYir         :Er7rrJS..         vBBBBB.   .     .   Jr..7i              .       .        :PL............. qY7r777r7r7777777r77711
             .::   .7    1I7r7rXP  .......  vBBQKi   . . .       Lir.      :BBBgv                .   :X: ............ .Er77777r777r7r7777777E
                  :12    USr7rJ2  .........                       :        :BBBBBg                   :I .............. vUr777r7r777r77777r7rPi
                 g:      :grrLP. .::::.:.:...           .:     .             .i7v.  ........ .       :1 .............. :gir777r777r77777r7r7LX
                 K7v.     Purg: :ii:::r::::.... .               .   . .           ......:........    :s .............. vB7rr777r7r777r777r7r7d
                           DPJ ii:i::r::::::.... . . . . . . . . . .         ......:::::.:i:.:....   r7............... EQS:7r7r7r77777777777rP:
                           .B.i::r::r.:ri.:.:.. . .         . . .   .     . .....:r::::::ri.:::....  si ............. .QPEir7r7777777r7r777r7UY
                           .U ..::ir.:r:.:.:....           . . . .     .:. ....::r::r:.:ri.i::::::.. X:.............. rBIM7rr777r7r7r7r7r7777LX
                           2i ..::i.:::::i7vi..    :ii.               ::. ....:ri..ii.:ri.:r:::::.:. P............... bESDui777r7r7r7r7r7r7777d
                           d. ...:.:::::.i7r..   :i: i7   ..         ri    ...ii.::7.:ri.:r:.:::::. .P ............. .QKIg1ir777r7r777r77777r7P.
              .:iii.       b  ........... .     :.   .r i7iu:.7:.ii.ir    ......::i::ri.:ii.:::::.. 7U ............. 7BISD2i77777r7r7r7r777r7rb.
           :uqKPXXSPqI:    d   . ....... .     .      :i.   :: ::. .K      ......:.:::::::::::::... u7 ............. ZdS2Rvr777777r7r777777777b.
          uZIsJLsvYLs1ZK.  2:                                      .r       . ....:.:.:.:::::.....  P:............. :BXIPEir7r77777777777r777rE
         :QLvYvLvLvLvsLMv  :5            .   .     .               i.          . ...............    P.............. UR55gsi777777777r7r7r777rLK
         LPsvvYvLvLvYvI:.   Z.    .     .      ru   .     . . .    i.                 ... . .      :K ............  BXSPbirr777r777777777r7r72L
         2uJJvvYvLvYvLU:.:   g     .   .       .:              .   i.                              Yv ............ sQSqgrrr7r7r7r7r777r7r7r7rZ.
         1MsUjYvYvYvvrv2j.   .Z.                            .      .i      .:.  :rY7r.             X:............ .QqKg7rr7r7r777r777r77777r12
          QBPvvLvLvvYIvv12s.   Pi      .           . .   .     .    ..   sPPqK5SXS25SM2      .     P ............ 2BdZ7ir7r7r777r77777r7r777Z
           :P7vvLvL7UgD17YKP.   YU.       . .                     .     gPJvLvsLLvvsL7Qi  . .     7J............ :Bb1iir7r7r7r7r7777777r7r7Pr
            gLvYvYvv7EEdvvLIZ    .YX.            . .                   KSv7vvv7LLL7YI712          K:............ M1rirr7r777r7r777r7r7r7rrU5
            gKJLY7vrJDZPJ7Yuq      qLuv:                            .:52v71ZZL7vY7rLQquI         .S ........... K2ir7r7r777r777r777r77777JE
             jKSLsr7rsJY7LvIs      7:.ivssri..                    .IXXJLv7qQgX7v77vEEZ57        .5. .......... 7drr7r7r777r7r777r7777777YZ
               rKIZPqu77YvYYd       U . ::igKSX21YL7r:..         :MuYLYvY7LUKJvvvUgEPS1  .i72qgQBr uR ....... :g7r777777777r777r77777r7sZ
                2QgDd57LvYvvZi      r7..r .57777LuuXPRQBQBQBPj1I5QvYvL7Lvv77r7vL7jussPbEBBBBQRZR5 jEb. ..... .dYr7r777r7r7r777r777r777jE
                 .vKSvsLYLL7b.       7::i  2771XXSX2UYLvYYJSv7Krq2777rYvLvLvLvLvL77ruj1UUJjYY77L:uji1r ..... 52r7r777r777r7r7r7r7r7r7IP
                    YPKPXSUqB.        iv.  ES5r.   ..ivuuuYIPJUjSJ7ssURU7LvLvLvYvL72JiiriiiriirjYvr7v2 .... vPr777r7777777r7r777r7rrUv
                      ...iYrsr         :  jq:           ..:::rsJd57PMgEYvvv7vvLvL7vgvi7r7r7r7iX1rr7r7P.... iZr7r77777r77777r777r7irE:
                             .vi::..   .ii.                      PYLLJ77v7r77v7Lv2DdSXLrr7r777vrr7r7rbi . .E7777r777r777r7r7r7rriLPBi
                          i   v   ..::i.     .                   iX7v7v7vLSbgqJSbS.  iqdUrrr7r7r7r77r2s   Pv7r777r777777777r7rr7XbPDP
                          .RbQQi .          r.                   .ZUYv7vvDQggRJi  .    :KEurr7r7r777rJu  5Jrr7r7r777r77777777rrdPX5PB
                           jRPQP .:::.. :rYDU                   .:sJPP2u25PXU.   r:      iSPvi7r7r7r772 Yjrr77777r77777r77777isbKI5SB:
                            .:.        .PuLd                   .:    sRqJi.     s.        :rP5i7r777rrJLJ77777r777777777r777r7rbqXISgX
                                       ILrq7                   .      :   ..::iJ      i   ::.2Pr7r777rLsr77r7r7r7777777r7r7r7rr7PqXIqB
                                     .Ss77Z                    27:....i      ..     :r.    r:.Ydr7r777r7r777r7r77777r7r777r777rirPqKSRX
                                    iKLr7jI                  7PPbEBBi .:i::.      :7:      :r:.vdr7r7r7r777r7r7r7r7r77777r7r777rrrXPKXB.
                                   1S777ib:                 LB1JYJR1     ..:irii:7i        .ri:.jKi7r7r7r7777777r7r77777r777r7r7rri2PPZQ
                                  P17r7iYM                  .5PSqKr           ..:           ii::.XUr7r7r7r7r777r7r777r7r77777r777rriYqPB7
                                .ZL7rriJB1                                                  :r::.:d7r7r77777r7r7r777r777r777r7r7r777irKMQ
                                gv7rriIZB                                                   :r:::.7qrr7r7r7r7r7r77777r777r7r77777r777irXBi
                               dJ7rrrKbBs                                .                  .r::::.Ks7r777r777r77777r7777777r7777777r7irMg
                              rErrrrPPZS                               .i                   .i::::.:bi7r777r777r7777777r77777r7r777r7r7iuB
                              EsrriqqKg:                             :vi                     r:i:::.Ijr7r7r7r7r7r7r777r7r7r777r7r7r777rrrB.
                              Dr7iudPdBBv.                        :7Kj.                     .r:::::.rPrr777777777r777777777r7r7r7r7r7r7rrR:
                           ::vPrr7bgQD7iivvvi:.                :rISs.                       .r::::::.Kv7r7r7r7r777r7r777r777777777r7r7r7rE:
                      .:rvsv7rqrruQ2:       ...           ..rjX5Ji                          .i::i:::.v5r7777777777777r777r77777r7r7r777rrPi
                   .ivYL7rrrii27i1:                     ...:i:.                             :i::::::::Krr7r7777777r7r77777r7777777r777r7iKS:.
                 :vYvrrrririiiYZZESDQqi                                                     r:::i::::.Sv7r7r77777r7777777r7r7r777777777riquiYvi
               :vYrririririrYji.:vPXUZBB.                                                  .ri:::::::.vjr7r777r777r7r77777r7r7r777r77777rMrii7vs:
              7L7rrirrL7rrjv:      XKUSQBr                                                 :r:::::::: vJrr7r7r77777r7r7r77777r7r7r7r777iub:irirrYv
             7Lririr7  rjr    .:r7rdRd5SKBS.                                               r::::::...vQvr7777777r77777r7777777r7r777r7rrgr:ririrrLv
             s7iririru    .iLJuL7ii:LqDPKKgQ5.                                            iii:::..:vbQdi7r77777r77777r777r777r7r7r7r7ivEL:iiririrru
             7vrrririvs.rsYvrriririi::7XdDPdgBPr                                         :r::..:rSZgZDrrr7r777r7r77777r7777777r7r7rr7Sq7:iiriririvv
              Yv7rriri7Y7iiiririririii::iLKEgDQBBbji:.       .isqK7                     .i:..iUbgdPPb7ir7r7r7r7r777777777r7r7r7rr7u5KYi:iiririrrLY.
               rYvrririiiriririririririi:::i7uSbDQBBBBBBMRBBRQQBBQBB2                   :.:JqgdPKdPUirr7777777r777r7r7r7rrrrrvsI5Ssr::iiirirrr7Jr
                 iYv7rriririririririririiii::.::ii7L1IqKBBU     iS2PBBI.               :vSgZbXPPb27irr7r777r7r7rrrrr7rvvYJ22S217r:::iirirrr7Lvr.
                   :rYLvrrrririririririririririiiiii.:rj7       .PDEbgQBQgjr.        .2ggDKPPdXU7ii7r7rrrrrrr7vYJUUI25UUJs7rii::iiirrrr77Yv7:
                      .i7LY77rririririririririri7: rjLi    .rvJv7:::iir71KQBBBRXY:..IQQdbPP517riiirr7r7vsJI2522JY77rii::::i:iirirrrrvLY7i.
                          .irvvYv7rrrririririririU  .   :7Yjvririiii:i:::::r71qRQBBBQEXIsvri:irvvjjI2IU1YY7rii:::i:iiiiririrr77vvYv7i:
                               .:ivvYvY7vrrrrrriivY .isJsrriririririiiriiii:::::irvJ1YsvLvJJ1UUjjv7rrii:i:i:iiririrrrr77vvYvL7r:.
                                     ..:r77LvYvLv7JIjYrrrrrririrrriririririririi:i::::iirrrriiii:iiiirirrrr7r77vvLLLvv7ri:..
                                             ...iirr77YvYLYvLvL7v7v7vr7777777r7r7r7r7r7rrrrr7r77v7LvYvsLYvv77ri::..
                                                         ....::::iirrrr7r777777v77777777rrrriiii::.....                                              

                                                         */

原文地址:https://www.cnblogs.com/lunatic-talent/p/11306486.html

时间: 2024-10-10 21:02:52

疯子的算法总结(七) 字符串算法之 manacher 算法 O(N)解决回文串的相关文章

字符串(马拉车算法,后缀数组,稀疏表):BZOJ 3676 [Apio2014]回文串

Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. Input 输入只有一行,为一个只包含小写字母(a -z)的非空字符串s. Output 输出一个整数,为逝查回文子串的最大出现值. Sample Input [样例输入l] abacaba [样例输入2] www Sample Output [样例输出l] 7 [样例输出2] 4 HINT 一个串是回文的,当且仅当它从左

hdu3068 求一个字符串中最长回文字符串的长度 Manacher算法

最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 31611    Accepted Submission(s): 11618 Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如aba, abba等 Input 输入有多组

Manacher 算法讲解 O(N)复杂度的 最长回文子串求解

求解最长回文子串的方法很多,有几种常见的O(N^2)的最长回文子串求解方法,比如说枚举中心位置向两边扩展,动态规划等,大部分朋友应该都比较熟悉. Manacher算法相比于上面两种方法,时间复杂度是O(N),空间复杂度也是O(N),可以说是快速求解决回文子串的利器.下面介绍这一算法的思想,以及在文末给与它的实现. 我们以字符串 "ACBCABBB"为例(只考虑长度为奇数的回文串,待会会说明为何这么做),这里引入回文半径的概念,回文半径是指以该字符为中心的回文串的半径,比如ABA,B字符

最长回文---hdu3068 (回文串 manacher 算法模板)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 题意很清楚:就是求一个串s的子串中最长回文串的长度:这类题用到了manacher算法 manacher算法(复制大神的解释): 定义数组p[i]表示以i为中心的(包含i这个字符)回文串半径长 将字符串s从前扫到后for(int i=0;i<strlen(s);++i)来计算p[i],则最大的p[i]就是最长回文串长度,则问题是如何去求p[i]? 由于s是从前扫到后的,所以需要计算p[i]时一定

1112个人赛,最长回文串常见算法讨论

ps.此贴大部分文字与代码来自网上,我只是取长补短整理了下 S=“c a b a”  那么  S' = “a b a c”, 这样的情况下 S和 S‘的最长公共子串是aba.没有错误. 但是当 S=“abacdfgdcaba”, 那么S’ = “abacdgfdcaba”. 这样S和S‘的最长公共子串是abacd.很明显abacd并不是S的最长回文子串,它甚至连回文都不是. 现在是不是都明白为什么最长回文子串不能转化成为最长公共子串问题了.当原串S中含有一个非回文的串的反序串的时候,最长公共子串

hdu 3068 最长回文串 o(n) Manacher 算法

最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10596    Accepted Submission(s): 3759 Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input 输入有多

Manacher算法—最长回文串

若字符串长度为n,则算法的时间复杂度为o(n) 假设有一个字符串abaaba 先把该字符串变成$  #  a  #  b  #  a  #  a  #  b  #  a  # 第一个字符设为'$',防止计算的时候数组越界 再计算p数组,先给出p数组的答案 i为坐标,ma数组放改变后的字符串,p数组代表以该字符为中心,向右和向左延伸p[i]个,是回文串 i      0  1  2  3  4  5  6  7  8  9  10 11 12 13ma[]   $  #  a  #  b  # 

Manacher算法 O(n)求最长回文串

最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5158    Accepted Submission(s): 1755 Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input 输入有多组

37:密码截取(回文串manacher算法)

题目描述:Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解.比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 .因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码