欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

如何求兩個任意長度字符串中的最長匹配子串

錢琪琛2年前14瀏覽0評論

如何求兩個任意長度字符串中的最長匹配子串?

從如何確定一個子串是否是回文串開始,我們需要知道這樣的 pair(中心,半徑)。意思是從每個中心點最多可以向左或者向右擴展的半徑。因為回文串長度可能是奇數或偶數,可以用一種技巧來消除這種特判,在相鄰字符中間插入一個特殊字符(如 ‘#’)。

例如,“12212321" => "#1#2#2#1#2#3#2#1#",如果令 P[i] 為以第 i 個字符為中心的擴展半徑,你會發現其對應的最長回文串的長度就是 P[i] - 1。

S # 1 # 2 # 2 # 1 # 2 # 3 # 2 # 1 # P 1 2 1 2 5 2 1 4 1 2 1 6 1 2 1 2 1 (p.s. 可以看出,P[i]-1正好是原字符串中回文串的總長度)

(參考自:O(n)時間求字符串的最長回文子串 - Felix021 - 將所有歡脫傾翻O(n)時間求字符串的最長回文子串 - Felix021 - 將所有歡脫傾翻)

所以就歸結到如何求 P 數組的問題。為了節約輪子成本,求解過程請參考上述鏈接。

這就是馬拉車算法啊!