日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法练习day18——190409(Manacher)

發布時間:2024/10/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法练习day18——190409(Manacher) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.Manacher算法

一個串中,找到最長的回文子串。

1.1 暴力解決

得解決長度為奇數的回文和長度為偶數的回文。

1.1.1 奇回文

  • i位置自己肯定構成回文;長度為1
  • i+1位置和i-1位置相不相等?相等,構成回文。長度為3
  • i+2位置和i-2位置相不相等?相等,構成回文。長度為5

1.1.2 偶回文

1.1.1 中的方法不適用

1.1.3 解決方法

向字符串的開頭、中間和結尾加東西。

既有奇回文:11311

又有偶回文:11

處理:

然后計算每一位的回文長度:

最終結果是:11/2=5

此方法適用于奇回文和偶回文。

添加的字符無論啥都可以。因為添加的字符不會和原字符串中的字符進行比較,只是和添加的字符比較(實軸永遠和實軸比較,虛軸和虛軸比較)。

時間復雜度:

2.概念

2.1 回文直徑

回文半徑

在Manacher算法中,需要準備一個數組——回文半徑數組。存以每個位置為中心的情況下,可括出來的回文半徑的長度。

加速:數組后面的位置的值能否利用前面的值,減少計算,實現加速。

2.2 最右回文右邊界

所有回文半徑中最靠右的位置。

初始:R在-1的位置;

0位置:只能擴到自己;

1位置:可以擴到2位置(#1#)

2位置:不行

3位置:可擴到6位置(#1#2#1#)

表示的是:每個位置下,R最右能到的位置。

3右邊擴到了最右的0位置。

2.3 回文右邊界的中心

C表示:第一次取得這個最右邊界的中心位置。

0位置時,它的C是3.

3的右邊界到它右邊的1,后面的2的右邊界也是2后面的1,但是1的C=3的位置(記錄的是第一次到達的)。

3.分情況討論

3.1 i位置不在回文右邊界中——

比如剛開始的時候,R在-1位置,i在1位置。就是i不在回文右邊界。

則暴力擴。

時間復雜度:R的變化范圍是從0~N,所有擴的范圍都在推后R,而且不會回退,所以總的時間復雜度是

3.2 i位置在回文右邊界的里面

位置1的回文右邊界在2位置,當i為2時,它在回文右邊界的里面。

3.2.1 i'的回文半徑在L里面——

由C和R得到回文左邊界L,假設此時i的位置如圖所示:

C肯定在i的左邊。關于C做i的對稱點i':

由回文數組中i'的回文半徑,可得到一下多個可能性:

可能性1:i'的回文區域在L和C的中間

舉例:

C:在F的位置

F的R和L在K位置

i'和i在b的位置

i'為重新的回文是aba,完全在L和C中間。

結論:i位置的回文半徑和i'的相等

證明:

  • 小R'到小L'之間肯定是回文結構
  • 且這個范圍不會擴的更大。
  • 3.2.2 L和R沒包住小L和小R——

    舉例:

    此時i的回文半徑就是i到R。

    證明:

    過程:

    3.2.3 L壓線

    舉例:

    這種i的回文半徑能不能擴的更大需要嘗試。上例中,由于k=k,所以可以擴。

    如下圖,k≠s,不可以擴

    時間復雜度同3.1:

    4.應用

    給定一個字符串,要求只能在串后面添加字符,使之成為一個回文串。要求添加的字符數最少。

    比如,給定:

    添加cba會使上串變為回文串,且最短。

    它就是在求必須包含最后一個字符("1")的情況下,最長回文串是多少。前面不是的部分(“abc”)逆序過來,就是答案。

    改寫Manacher:

    • 一直求每個位置的回文半徑。
    • 當R到達最后一個位置的時候,停。得到回文半徑到R的位置C。此時有R和C。
    • 然后將R以C為中心,對稱到R’。即得包含最后一個位置的最長回文串。
    • 然后將前面剩余部分逆序,添加到給定字符串的后面。

    ?

    比如:

    ?

    總結

    以上是生活随笔為你收集整理的算法练习day18——190409(Manacher)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。