LCS问题就是求两个字符串最大相同的公共子串;我们现假设有两个字符串X,Y。其长度分别为m,n
我们从X,Y两个字符串的最后一个字符串开始看起
如果 Xm = Yn:
LCS(X, Y) = LCS(Xm-1, Yn-1)+ "Xm"
如果Xm != Yn:
LCS(X,Y) = max(LCS(Xm-1,Yn), LCS(Xm, Yn-1))
我们即构建了这样的动态转移方程。如果还不是特别明白,我们来看以下例子。
有了上述的动态转移方程,我们该如何编写代码呢?
我们采用递归加备忘录的方式,基于刚刚的动态转移方程我们设置一个二维数组用来
存放当前最长的公共子串。我们可得到以下递推式。
|
对于下列两个字符串,其产生的二维数组如下。
xi | A | B | A | B | A | C | A | B | |
---|---|---|---|---|---|---|---|---|---|
yi | 0 | 0 | 0 | 0 | 0 | 0</ |