最长公共子序列

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

 

转载于:https://www.cnblogs.com/ivyharding/p/11334023.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值