最長公共子串與最長公共子序列
阿新 • • 發佈:2018-01-25
兩個 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 inrange(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))
最長公共子串與最長公共子序列