最长公共子序列

给定两个字符串,求解这两个字符串的最长公共子序列(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))

 

posted @ 2019-08-11 10:03  lililili——  阅读(468)  评论(0)    收藏  举报