(一)最长公共子序列(LCS):
我们用Xi代表{x1, x2, .. , xi}, 用Yj代表{y1, y2, .. , yj}。那么,求长度分别为n,m的两个序列X, Y的LCS,就相当于求Xm与Yn的LCS。
我们可以将其分割为局部问题进行分析,要考虑如下两种情况:
xm = yn时, 在Xm-1与Yn-1的LCS后面加上xm( = yn)就是Xm与Yn的LCS
xm ≠yn时,Xm-1与Yn的LCS和Xm与Yn-1的LCS中更长的一方就是Xm与Yn的LCS
设有c[m+1][n+1],该二维数组中c[i][j]表示Xi与Yj的LCS长度,由递推公式可得:
if i = 0 or j = 0 : c[i][j] = 0;
if i, j > 0 and xi = yj : c[i][j] = c[i-1][j-1]+1;
if i, j > 0 and xi ≠ yj: c[i][j] = max(c[i][j-1], c[i-1][j]);