长度不同时的最长子序列问题

Longest Subsequence problem if the lengths are different

让输入序列分别为 X[0..m-1]Y[0..n-1],长度分别为 mn。设L(X[0..m-1], Y[0..n-1])XY两个序列的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]) )

长度不一样怎么解决?以及如何打印相应的序列

输入字符串的长度是否相同并不重要,这是递归的基本情况。

if (m == 0 || n == 0) 
    return 0; 

If we reach the end of any one of the string, the recursion stops and unwinds from there.

还有你在评论中提到的例子:

ABCEFGABXDE 首先我们比较两个字符串的最后一个字符。在这种情况下,它们是不一样的。

所以我们尝试两种情况:

  • 从第一个字符串中删除最后一个字符并将其与第二个进行比较。
  • 从第二个字符串中删除最后一个字符并将其与第一个字符进行比较。

和 return 两种情况下的最大值。

(附带说明,如果最后一个字符匹配,我们将在答案中加 1 并从两个字符串中删除最后一个字符)

这个过程一直持续到任何一个字符串到达​​它的末尾,在这种情况下,满足递归的基本情况并且递归 returns.

所以字符串的原始长度是否相同并不重要