繁体   English   中英

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

[英]Longest Subsequence problem if the lengths are different

让输入序列分别为长度为mnX[0..m-1]Y[0..n-1] 并让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; 

如果我们到达任何一个字符串的末尾,递归就会停止并从那里展开。

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

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

所以我们尝试两种情况:

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

并从两种情况下返回最大值。

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

这个过程一直持续到任何字符串到达它的结尾,在这种情况下,递归的基本情况得到满足并且递归返回。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM