如果长度不同则最长子序列问题

时间:2019-11-01 16:59:01

标签: python algorithm time-complexity dynamic-programming space-complexity

让输入序列分别为长度为X[0..m-1]Y[0..n-1]的{​​{1}}和m。令n为两个序列L(X[0..m-1], Y[0..n-1])X的LCS的长度。以下是Y的递归定义。

如果两个序列的最后一个字符都匹配(或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]

如果长度不同,如何解决问题?以及如何打印各个序列

1 个答案:

答案 0 :(得分:0)

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

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

如果我们到达任何一个字符串的末尾,则递归将停止并从此处展开。

也是您在评论中提到的示例:

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

所以我们尝试两种情况:

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

并返回两种情况的最大值。

(请注意,如果最后一个字符已匹配,我们将在答案中加1并从两个字符串中删除最后一个字符)

此过程一直持续到任何字符串到达​​末尾为止,在这种情况下,递归的基本情况已满足,并且递归返回。

因此,字符串的原始长度是否相同都没关系。