让输入序列分别为长度为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]
如果长度不同,如何解决问题?以及如何打印各个序列
答案 0 :(得分:0)
输入字符串的长度是否相同并不重要,递归的基本情况会引起注意。
if (m == 0 || n == 0)
return 0;
如果我们到达任何一个字符串的末尾,则递归将停止并从此处展开。
也是您在评论中提到的示例:
ABCEFG
和ABXDE
首先,我们比较两个字符串中的最后一个字符。在这种情况下,它们是不相同的。
所以我们尝试两种情况:
并返回两种情况的最大值。
(请注意,如果最后一个字符已匹配,我们将在答案中加1并从两个字符串中删除最后一个字符)
此过程一直持续到任何字符串到达末尾为止,在这种情况下,递归的基本情况已满足,并且递归返回。
因此,字符串的原始长度是否相同都没关系。