📜  门| GATE-CS-2009 |第53章

📅  最后修改于: 2021-07-02 17:33:34             🧑  作者: Mango

给定序列的子序列就是给定序列,其中遗漏了一些元素(可能没有或全部)。我们分别给出了两个序列X [m]和Y [n],长度分别为m和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]

这个问题的测验