1. 程式人生 > >最長公共子串與最長公共子序列

最長公共子串與最長公共子序列

兩個 ring 數組存儲 src str int sdf range div

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

最長公共子串與最長公共子序列