使用Trie查找最长的公共子串

时间:2012-10-16 22:43:31

标签: string algorithm data-structures trie

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

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

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

但我觉得效率不高。 还有其他改进的方法吗?

1 个答案:

答案 0 :(得分:4)

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

请注意,有一种算法可以在O(n)中构建后缀树(当然,假设是一个常量字母)。