多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > Manacher 算法模板

Manacher 算法模板

來源:程序員人生   發布時間:2017-02-23 09:17:27 閱讀次數:3121次

簡介

  • 在字符串的題目中,有時會遇上 回文串 這樣1個名詞

  • 顧名思義,回文串 就是 正讀和反讀都1樣的字符串

  • 最長回文子串 ,就是在1個字符串的所有子串中,是回文串且長度最長的那個

  • 求最長回文子串最普通的方法是 O(N2) ,即枚舉1個點往兩邊擴大

  • 但是在有些題目中,N 卻10分的大

  • 那末我們就要用到 時間空間復雜度都是 O(N)Manecher 算法

用法

  • 在處理回文串時,我們常常會被 中間字符是1個還是兩個 這樣的問題困擾

  • 但是在機靈的 Manacher 算法 中,這個問題得到了完善的解決

  • 在每兩個字符中間插入1個不會出現的分隔符(如:#)

  • 以后在頭尾插入1個還是沒有出現的分隔符(如:*)來避免 While 出界

  • 這樣處理起來就方便很多了!

  • 設讀入的字符串為 s[i]

  • 記錄 p[i] 表示 以 s[i] 為中心往兩邊擴大的最大長度

  • 視察可知,實際的回文串長度即為當前的 s[i]?1

  • 再記錄1個數 idp[id]+id表示在 i 位置前所有回文串中能延伸到的最右真個位置

  • 以下圖:

Manacher

  • 算法核心就是:

  • if(p[id]+id>i) p[i]=min(p[id?2?i],p[id]+id?i); else p[i]=1;

  • 當之前所有回文串中能延伸到的最右端覆蓋過 i 時,則取最小值,否則 p[i]=1 ,及自己本身

  • 這樣不斷保護 p[i]id ,就可以在 O(N) 內求出 最長回文子串 了!

  • 至于為何時間是線性的,由于最有端 p[id]+id 最多只能移動 N 次,

  • 有效移動的操作就嚴格線性啦!!

  • 下面附上模板:

void Manacher()
{
    scanf("%s",s);
    int len=strlen(s);
    for(int i=len;i>=0;i--)
    {
        int k=i*2+1;
        s[k+1]=s[i],s[k]='#';
    }//插入分隔符
    len*=2;
    s[ans=id=0]='*';
    for(int i=2;i<=len;i++)
    {
        if(p[id]+id>i) p[i]=min(p[id*2-i],p[id]+id-i); else p[i]=1;
        while(s[i-p[i]]==s[i+p[i]]) p[i]++;
        if(p[i]+i>p[id]+id) id=i;
        if(p[i]>ans) ans=p[i];
    }//處理、計算
}
  • 注釋:s[i]p[i]id 如題意義,ans 表示 最長回文子串 的長度,而 len 是原串長度

總結

  • 這個 Manacher 算法效力極高,時間空間都是 O(N) 線性的

  • 再者代碼極短,所以使用起來10分方便,應多多使用!!!

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲天堂视频在线 | 亚洲第九十七页 | 99久久精品免费看国产漫画 | 爱爱小视频日本 | 无遮无挡非常色的视频免费 | 欧美一二三区视频 | 全黄冷激性性视频 | 黄色大全免费看 | 欧美久久久久欧美一区 | 婷五月综合 | 免费操人视频 | 国产免费叼嘿在线观看 | 人成午夜视频 | 岛国视频在线播放 | 国产精品欧美一区二区在线看 | 亚洲国产成人久久一区二区三区 | 欧美日本亚洲 | 在线免费观看a级片 | 免费福利网站在线观看 | 亚洲欧美综合另类 | aⅴ一区二区三区无卡无码 aⅴ在线免费观看 | 中文字幕日韩欧美一区二区三区 | 日产日韩亚洲欧美综合搜索 | 欧美在线观看一区 | 亚洲黄区| 欧美片欧美日韩国产综合片 | 欧美三级一区 | 久久精品第一页 | 欧美理论片在线观看一区二区 | 亚洲性69影院在线观看 | hd欧美xxx欧美极品hd | 欧美18 - 19sex性 | 日本欧美一区二区三区高清 | 欧美xxxx网站| 精品国产亚洲人成在线 | 一区二区三区四区精品 | 加勒比一区二区三区 | 性xxxfreexxxx性欧美 | 黄色免费在线网站 | h视频免费在线 | 亚洲不卡视频在线观看 |