最长公共子序列
设Zk是序列Xm和Yn的最长公共子序列
(1)若zk=xm=yn,则Zk+1是Xm-1和Yn-1的最长公共子序列
(2)若xm≠yn,xm≠zk,则Zk是Xm-1和Yn的最长公共子序列
(3)若xm≠yn,yn≠zk,则Zk是Xm和Yn-1的最长公共子序列
反证即得
def LCS(A,B):
n=len(A)
m=len(B)
A.insert(0,'0')
B.insert(0,'0')
#二维表c存放公共子序列的长度
c=[([0]*(m+1)) for i in range(n+1)]
#遍历m×n数组
for i in range(0,n+1):
for j in range(0,m+1):
if (i==0 or j==0):
c[i][j]=0
elif A[i]==B[j]:
c[i][j]=c[i-1][j-1]+1
#max(c[i][j-1],c[i-1][j])
elif c[i-1][j]>=c[i][j-1]:
c[i][j]=c[i-1][j]
else:
c[i][j]=c[i][j-1]
return c</