出现n次的最长子串

时间:2010-04-04 19:31:54

标签: algorithm string

对于长度 L 的字符串,我想找到在字符串中出现 n(n 或更多次的最长子字符串。

例如,在“BANANA”中出现2次或更多次的最长子字符串是“ANA”,一次从索引1开始,再次从索引3开始。允许子字符串重叠。

在字符串“FFFFFF”中,出现3次或更多次的最长字符串是“FFFF”。

n = 2 的强力算法将选择字符串中的所有索引对,然后一直运行直到字符不同。运行部分需要 O(L),并且对的数量是 O(L ^ 2)(不允许重复,但我忽略了这一点)所以 n = 2 的算法复杂度为 O(L ^ 3)。对于 n 的更大值,它会呈指数级增长。

这个问题有更高效的算法吗?

2 个答案:

答案 0 :(得分:13)

后缀树可以非常快速地解决这些问题,通常是O(n)时间和空间。

查看维基页面:

Suffix Trees

并阅读该页面上的材料(功能部分),链接到:

Longest Repeated Substring

答案 1 :(得分:0)