首页 > 其他 > 详细

最长公共子串与最长公共子序列

时间:2018-01-25 19:43:24      阅读:246      评论:0      收藏:0      [点我收藏+]

一、最长公共子串(Longest Common Substring)

遍历的时候用一个二维数组存储相应位置的信息,如果两个子串1与子串2相应位置相等:则看各自前一个位置是否相等,相等则该位置值B[i][j]=B[i-1][j-1]+1,不相等则置为1。如果两个子串1与子串2相应位置不相等,则B[i][j]=0。如下:

技术分享图片

 代码如下:

 

def longestSub(str1,str2):
    s1=list(str1)
    s2=list(str2)
    B=[([0]*len(s2)) for i in range(len(s1))]
    maxLen=0
    for i in range(len(s1)):
        for j in range(len(s2)):
            if s1[i]==s2[j]:
                if i-1>=0 and j-1>=0:
                    B[i][j]=B[i-1][j-1]+1
                    if B[i][j]>maxLen:
                        maxLen=B[i][j]
                else:
                    B[i][j]=1
            else:
                B[i][j] = 0
    print(B)
    return maxLen
s1="asdfas"
s2="werasdfaswer"
print(longestSub(s1,s2))

 

最长公共子串与最长公共子序列

原文:https://www.cnblogs.com/gczr/p/8352799.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!