【发布时间】:2019-11-01 16:59:01
【问题描述】:
让输入序列分别为X[0..m-1]和Y[0..n-1],长度分别为m和n。并让L(X[0..m-1], Y[0..n-1]) 是两个序列X 和Y 的 LCS 的长度。以下是L(X[0..m-1], Y[0..n-1])的递归定义。
如果两个序列的最后一个字符匹配(或X[m-1] == Y[n-1]),则
L(X[0..m-1], Y[0..n-1]) = 1 + L(X[0..m-2], Y[0..n-2])
如果两个序列的最后一个字符不匹配(或X[m-1] != Y[n-1]),则
L(X[0..m-1], Y[0..n-1]) = MAX ( L(X[0..m-2], Y[0..n-1]), L(X[0..m-1], Y[0..n-2]) )
如果长度不同,如何解决问题?以及如何打印相应的序列
【问题讨论】:
-
您刚刚描述了解决问题的算法?字符串的长度实际上并不重要。
-
我不知道最长公共子序列问题的标准算法要求两个序列具有相同的长度。
-
这两个字符串不是公共子序列;它们不匹配,并且会使算法失败。您还提到“如何打印相应的子序列” - 您没有,因为两者是相同的。您打印生成的单个值。
-
如何打印最长的公共子序列??
标签: python algorithm time-complexity dynamic-programming space-complexity