对于2个字符串,我想找到不同LCS的数量。我在维基上阅读了如何打印所有LCS,但如何检查它们是不同的?哈希表不可行,因为我的输入字符串每个可以是1500-2000个字符长,所以LCS的最大数量可以是2000选择1000
答案 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。这是两个字符串串联长度的时间和空间线性。