[英]Longest Subsequence problem if the lengths are different
让输入序列分别为长度为m
和n
的X[0..m-1]
和Y[0..n-1]
。 并让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]) )
如果长度不同,如何解决问题? 以及如何打印相应的序列
输入字符串的长度是否相同并不重要,这由递归的基本情况处理。
if (m == 0 || n == 0)
return 0;
如果我们到达任何一个字符串的末尾,递归就会停止并从那里展开。
还有你在评论中提到的例子:
ABCEFG
和ABXDE
首先我们比较两个字符串的最后一个字符。 在这种情况下,它们并不相同。
所以我们尝试两种情况:
并从两种情况下返回最大值。
(附带说明,如果最后一个字符匹配,我们将在答案中加 1 并从两个字符串中删除最后一个字符)
这个过程一直持续到任何字符串到达它的结尾,在这种情况下,递归的基本情况得到满足并且递归返回。
所以字符串的原始长度是否相同并不重要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.