最长公共子序列
给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence)。
子序列指的是:在字符串中取出某些字符构成新字符串,在原字符串和新字符串中的字符相对位置不变。
比如字符串1:BDCABA;字符串2:ABCBDAB
则这两个字符串的最长公共子序列长度为4,最长公共子序列是:BCBA

c[i,j]表示:(x1,x2....xi) 和 (y1,y2...yj) 的最长公共子序列的长度。(是长度哦,就是一个整数嘛)。公式的具体解释可参考《算法导论》动态规划章节


代码:
def findLCS( A, n, B, m):
# write code here
# 先建立一个矩阵,用于存储长度
table=[[0 for i in range(m+1)] for j in range(n+1)]
print(len(table),len(table[0]))
for i in range(1,n+1):
for j in range(1,m+1):
if A[i-1]==B[j-1]:
table[i][j]=table[i-1][j-1]+1
else:
table[i][j]=max(table[i-1][j],table[i][j-1])
return table[i][j]
if __name__ == "__main__": A = "BDCABA" n = 6 B = "ABCBDAB" m =7 print(findLCS(A, n, B, m))

浙公网安备 33010602011771号