求一个字符串的最长重复字串问题
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
分析:
方法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
相关文章推荐
- 编程珠玑(二)寻找一个字符串中最长重复字串
- 写一个函数,用来把一个字符串用指定的字符作为分隔符分割成若干个子串输出 | 写一个函数,用来返回一个字符串中重复出现的最长字串的长度及其开始地址
- 最长重复字串和两字符串中最长公子子串问题
- 用后缀数组 求一个字符串的最长重复字串
- 返回一个字符串中重复出现的最长字串的长度及其开始字符
- 【字符串问题】求一个字符串中重复出现的最长的子串
- 重复子串问题(四):求两个字符串的最长公共字串
- 字符串中选择最长无重复字串问题
- 字符串中重复出现的最长字串-后缀树思想
- 【每日面试题】给定一个字符串,求出其最长的重复子串
- 最长回文字串--------注意一个小点-----添加字符的问题
- 面试题35:寻找一个字符串中最长的重复子串
- 寻找一个字符串中的最长重复子串
- 求一个字符串中最长的相同字符字串 不区分大小写
- 给定一个字符串,求出其最长的重复子串。
- 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串
- 寻找一个字符串中最长的重复子串,如 abcdabc 最长重复串 是abc
- 找出一个字符串中最长重复次数的子字符串,并计算其重复次数
- 求一个字符串当中的最长重复子串
- 求一个字串中最长的连续字符串