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

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

分析:

方法1:

  一種方法是先解決http://blog.csdn.net/bertzhang/article/details/7303010的問題,在對字符串進行循環處理。

具體過程如下:

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中堆砌重複關鍵詞的問題。


參考文獻:

http://blog.csdn.net/bertzhang/article/details/7303010

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章