给定序列的子序列只是给定序列,其中省略了一些元素(可能没有或全部)。我们分别给出了两个长度为 m 和 n 的序列 X[m] 和 Y[n],其中 X 和 Y 的索引从 0 开始。
我们希望找到 X[m] 和 Y[n] 的最长公共子序列 (LCS) 的长度为 l(m,n),其中函数l(i,j) 的不完整递归定义要计算X[m] 和 Y[n] 的 LCS 的长度如下:
l(i,j) = 0, if either i=0 or j=0
= expr1, if i,j > 0 and X[i-1] = Y[j-1]
= expr2, if i,j > 0 and X[i-1] != Y[j-1]
(A) expr1 ≡ l(i-1, j) + 1
(B) expr1 ≡ l(i, j-1)
(C) expr2 ≡ max(l(i-1, j), l(i, j-1))
(D) expr2 ≡ max(l(i-1,j-1),l(i,j))答案: (C)
解释:在最长公共子序列问题中,X[0..i] 和 Y[0..j] 有两种情况
1) The last characters of two strings match.
The length of lcs is length of lcs of X[0..i-1] and Y[0..j-1]
2) The last characters don't match.
The length of lcs is max of following two lcs values
a) LCS of X[0..i-1] and Y[0..j]
b) LCS of X[0..i] and Y[0..j-1]
这个问题的测验