找出唯一最长公共子序列的数量

时间:2009-11-02 11:09:46

标签: algorithm data-structures

对于2个字符串,我想找到不同LCS的数量。我在维基上阅读了如何打印所有LCS,但如何检查它们是不同的?哈希表不可行,因为我的输入字符串每个可以是1500-2000个字符长,所以LCS的最大数量可以是2000选择1000

3 个答案:

答案 0 :(得分:2)

找到每个子序列后,将它们插入到trie的惰性版本中。

Trie遭受了浪费记忆的问题。因此,不要将值存储到最后,只有在需要解决冲突时才分支出来。

EG。安娜,应用程序,安妮

最初,根节点将包含anna。

当您尝试插入应用时,您会意识到根目录中已经存在一个字符串,因此会创建一个分支并尝试放置anna和应用。冲突仍然存在,直到你分成 na和 ap ps。

目前,trie看起来像:

${FILE,path="target/surefire-reports/emailable-report.html"}

现在当您插入anne时,您将达到 并意识到存在冲突并通过添加 n 分支然后 a 和 e 分支。

最终的特里会看起来像:

                                    a
                           (anna) n   p (apps)

答案 1 :(得分:1)

您可以使用哈希表,但不是存储整个子字符串,而是存储相对于原始字符串的开头和结尾(列表)。这样,如果存在任何冲突,您可以在原始字符串中进行字符串比较。

答案 2 :(得分:0)

将两个字符串丢给suffix tree。这是两个字符串串联长度的时间和空间线性。