【问题标题】:Longest substring that appears n times出现n次的最长子串
【发布时间】:2010-04-04 19:31:53
【问题描述】:

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

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

字符串“FFFFFF”中出现3次以上的最长字符串为“FFFF”。

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

有没有更有效的算法来解决这个问题?

【问题讨论】:

    标签: algorithm string


    【解决方案1】:

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

    查看维基页面:

    Suffix Trees.

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

    Longest Repeated Substring.

    【讨论】:

    • 优秀的答案(与您的用户名相反)!
    【解决方案2】:
    猜你喜欢
    • 2021-10-27
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 2016-10-23
    • 2021-04-07
    • 2015-11-16
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多