【问题标题】:Finding longest common substring using Trie使用 Trie 查找最长的公共子串
【发布时间】:2012-10-07 03:17:22
【问题描述】:

如何使用 trie 在两个或多个字符串中找到 LCS(最长公共子字符串)?

我有个这样的想法—— 假设我的第一个字符串是“abbcabdd”。 然后我将首先在 trie 中插入“abbcabdd”,然后是“bbcabdd”,然后是“bcabdd” ....,然后是“d” 并对每个字符串重复此过程。

然后通过遍历trie计算最长的子串。

但我认为它效率不高。 有没有其他改进的方法?

【问题讨论】:

    标签: string algorithm data-structures trie


    【解决方案1】:

    您所描述的正是suffix tree - 使用优化的算法生成后缀树,您的效率会提高!

    请注意,O(n) 中有一个用于构建后缀树的算法(当然,假设是一个常量字母表)。

    【讨论】:

    • 谢谢。是的,我正在描述后缀树。我的后缀树实现足够快,但我担心我的算法会为每个 n= stringLength 的字符串插入 n 个字符串。
    • @palatok:你可以使用后缀树生成器算法——它会产生相同的结果,并且已经被研究和分析过,不需要在这里重新发明轮子。创建后缀树是O(n)
    猜你喜欢
    • 2014-11-18
    • 2012-05-02
    • 2014-04-16
    • 1970-01-01
    • 2014-04-14
    • 2012-06-15
    • 2015-06-23
    • 2016-06-03
    • 2010-11-28
    相关资源
    最近更新 更多