HiHo 1032 最長迴文子串 (Manacher演算法求解),

來源:互聯網
上載者:User

HiHo 1032 最長迴文子串 (Manacher演算法求解),

Manacher演算法o(n)求解最長迴文子串問題 非常巧妙

#include<bits/stdc++.h>using namespace std;char str[2000020],s[2000020];int p[2000020];int len,id,mx;void pre() //對字串進行預先處理{    len=strlen(s);    str[0]='$';    str[1]='#';    for(int i=0;i<len;i++)    {        str[i*2+2]=s[i];        str[i*2+3]='#';    }    len=len*2+2;    str[len]=0;}void Manacher() //演算法核心{    mx=0;    for(int i=1;i<len;i++)    {        if(mx>i)            p[i]=min(p[2*id-i],p[id]+id-i);        else            p[i]=1;        while(str[i+p[i]]==str[i-p[i]])            p[i]++;        if(p[i]+i>mx)        {            mx=p[i]+i;            id=i;        }    }}int main(){    int N;    scanf("%d",&N);    for(int i=1;i<=N;i++)    {        scanf("%s",s);        pre();        Manacher();        printf("%d\n",p[max_element(p,p+len)-p]-1);    }    return 0;}

Manacher演算法可參考 http://blog.csdn.net/ggggiqnypgjg/article/details/6645824




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.