一、定义:
定义:
LCS(A,B)表示字符串A和字符串B的最长公共子串的长度。
很显然,LCS(A,B)=0
表示两个字符串没有公共部分。
例如,字符串A=kitten,字符串B=sitting ,那他们的最长公共子串为ittn ,最长公共子串长度为4。
(注:最长公共子串不需要连续出现,但一定是出现的顺序一致),
二、公式:
为了讲解计算LCS(A,B),特给予以下几个定义:
A=a1a2……aN,表示A是由a1a2……aN这N个字符组成,Len(A)=N;
B=b1b2……bM,表示B是由b1b2……bM这M个字符组成,Len(B)=M.
定义LCS(i,j)=LCS(a1a2……ai,b1b2……bj),其中0≤i≤N,0≤j≤M.
对于1≤i≤N,1≤j≤M,有公式:
若ai=bj,则LCS(i,j)=LCS(i-1,j-1)+1
若ai≠bj,则LCS(i,j)=Max(LCS(i-1,j-1),LCS(i-1,j),LCS(i,j-1))
计算LCS(A,B)的算法有很多,下面介绍的Needleman/Wunsch算法是其中的一种。和LD算法类似,Needleman/Wunsch算法用的都是动态规划的思想。