给出两个字符串,求其最长公共子序列的长度(LCS)
如:
abcdefghij badfhcajie其LCS为a、d、f、h、j,则输出5
注意子序列和子串是不同的,子串必须连续,子序列只要按顺序就行了,中间可以跳过某个字符。
设字符串A的长度为m,B的长度为n,subA(i)表示A的前i个字符的子串
则LCS(A,B)为:
1)若A、B的最后一个字符相同,则为LCS(subA(m-1),subB(n-1))+1
2) 若A、B的最后一个字符不同,则为LCS(A,subB(n-1))和LCS(subA(m-1),B)中最大的那个
3)若A、B中有一个为空,则为0。
将A、B所有LCS的长度值存入一个二维数组c[m][n]中,m、n为A、B的子串长度。
如在上面的例子中,
c[0][0]=0,c[0][1]=0,c[1][0]=0
c[1][1]表示A的子串'a'与B的子串'b'的LCS,为0
c[1][2]表示A的子串'a'与B的子串'ba'的LCS,为1