日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

Manacher 算法模板

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

簡介

  • 在字符串的題目中,有時會遇上 回文串 這樣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分方便,應多多使用!!!

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 精品成人一区二区三区 | 久久久国产精品一区 | 欧美一区二区三区电影 | 久久九九 | 亚洲精品乱码久久久久久按摩观 | 日日艹 | 国产精品视频免费看 | 国产精品久久久久一区二区三区 | 久久免费精品 | 欧美三级在线 | 免费日韩视频 | 精品国产精品国产偷麻豆 | 国产91久久精品一区二区 | 国产精品福利在线播放 | 四虎884aa成人精品最新 | 久久久久免费视频 | 欧美日在线观看 | 99久久99久久久精品棕色圆 | 欧美日韩精品中文字幕 | 亚洲综合色婷婷 | 久久精品国产一区二区 | 成人精品视频99在线观看免费 | 国产欧美日本在线 | 日韩精品中文字幕一区二区三区 | 中国大陆高清aⅴ毛片 | 日韩精品久久久久久久电影99爱 | 欧美日韩成人精品 | 欧美激情网站 | 成人做爰视频www网站小优视频 | 成人精品久久久 | jizzjizz中国丰满熟少妇 | 亚洲成人一区二区 | 国产精品99一区二区三区 | 成人区精品一区二区 | 欧美一区二区在线播放 | 久久成人欧美 | 欧洲一区| 日韩电影中文字幕 | 日韩免费在线电影 | 久久久蜜桃视频 | 亚洲自拍偷拍视频 |