您的位置:首页 > 其它

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

2012-02-28 17:37 246 查看
给定一个字符串,求出这个字符串的最长重复字串,例如abcdbcd,最长重复字串是bcd。

分析:

方法1:

一种方法是先解决/article/8932224.html的问题,在对字符串进行循环处理。

具体过程如下:

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中堆砌重复关键词的问题。

参考文献:

/article/8932224.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: