1. 程式人生 > >求一個字串的最長重複字串問題

求一個字串的最長重複字串問題

給定一個字串,求出這個字串的最長重複字串,例如abcdbcd,最長重複字串是bcd。

分析:

方法1:

具體過程如下:

1)首先解決兩個字串的最長公共鄰接子串問題;

2)將字串,abcdbcd分成如下兩個字串的集合:

“a" 和 "bcdbcd"

"ab"和“cdbcd"

"abc"和"dbcd"

"abcd"和"bcd"-->產生最大子串bcd

“abcdb"和"cd"

"abcdbc"和"d"

完畢。

演算法的複雜度是O(n^3)

方法2:

  通過後綴樹來計算,迴圈將字串拆分成:

abcdbcd

bcdbcd

cdbcd

dbcd

bcd

cd

d

構建一棵字尾樹如下:

a-b-c-d-b-c-d

b-c-d-b-c-d

c-d-b-c-d

d

對於字串bcd、cd等已經出現在後綴樹中的字串,計算路徑最長的一個字串,就是最長字串。

演算法複雜度為O(n)

其實這個問題來源於web search spam中spamer在標題、anchor中堆砌重複關鍵詞的問題。

參考文獻: