【发布时间】:2010-02-11 15:13:55
【问题描述】:
我正在尝试计算两个字符串之间存在的最长可能子序列的数量。
例如 字符串 X = "efgefg"; 字符串 Y = "efegf";
输出:最长公共序列数为:3 (即:efeg, efef, efgf——这个不需要算法计算,这里只是演示)
我已经设法在 O(|X|*|Y|) 中使用基于这里一般思想的动态编程:Cheapest path algorithm。
任何人都可以想出一种方法来更高效地进行此计算吗?
--根据 Jason 的评论进行编辑。
【问题讨论】:
-
这些看起来是子序列而不是子字符串。请澄清。
-
我不确定我理解你在计算什么。使 efeg、efef、efgf 成为所有有效解决方案的规则是什么?我想你不能重新排列字符的顺序,而只能删除一些?这两个字符串是否应该是完全通用的,例如,您可能有“X=AAAAAAAAAAAAAAAAAAAAAAAAA”和“Y=B”,在这种情况下答案是 0?
-
@p.marino:正确。您不能重新排列顺序,但可以删除字母。在你的例子中答案是 0。
-
对于 X=AAAAAAAAAAAAAAAAAA 和 Y=B,最长公共子序列的数量不应该是 1 吗?有一个长度为 0 的公共子序列,它是最长的。