求一个字符串的最长重复字串问题

给定一个字符串,求出这个字符串的最长重复字串,例如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

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