码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-01-25 19:50:22      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:pos   else   公共子串   print   bst   lis   mon   style   ==   

一、最长公共子串(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))

 

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

标签:pos   else   公共子串   print   bst   lis   mon   style   ==   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!