求解兩個字串的最長公共子串

2021-10-22 12:12:57 字數 1438 閱讀 3415

# 求解兩個字串的最長公共子串

# 比如字串1:helloworld;字串2:hloop

## 則這兩個字串的最長公共子串行長度為2,最長公共子串行是:lo

#問題定義:lcs[i][j]為以s1[i]與s2[j]為結尾的的最長公共子串的長度

#遞推公式:

# lcs(xn,ym)=lcs(xn-1,ym-1)+1 if x[n]==y[m]

# lcs(xn,ym)=0 if x[n]!=y[m]

def maxlcstring(string1,string2):

len1 = len(string1)

len2 = len(string2)

res = [[0 for i in range(len2)] for j in range(len1)]

for i in range(0,len1):

for j in range(0,len2):

if i==0:

if string1[i]==string2[j]:

res[i][j]=1

elif j==0 and i!=0:

if string1[i]==string2[j]:

res[i][j] = 1

else:

if string1[i] == string2[j]:

res[i][j] = res[i-1][j-1]+1

else:

res[i][j] = 0

return max([max(j)for j in res])

print(maxlcstring("helloopworld","ihloop"))

def lcstring(string1,string2):

len1 = len(string1)

len2 = len(string2)

res = [[ for i in range(len2)] for j in range(len1)]

for i in range(0,len1):

for j in range(0,len2):

if i==0:

if string1[i]==string2[j]:

res[i][j]=[string1[i]]

elif j==0 and i!=0:

if string1[i]==string2[j]:

res[i][j] = [string1[i]]

else:

if string1[i] == string2[j]:

res[i][j] = res[i-1][j-1]+[string1[i]]

else:

res[i][j] =

return res

print(lcstring("helloopworld","ihloop"))

求解兩個字串的最長公共子串行

一,問題描述 給定兩個字串,求解這兩個字串的最長公共子串行 最長公共序列 比如字串1 bdcaba 字串2 abcbdab 則這兩個字串的最長公共子串行長度為4,最長公共子串行是 bcba 二,演算法求解 這是乙個動態規劃的題目對於可用動態規劃求解的問題,一般有兩個特徵 最優子結構 重疊子問題 最優...

求解兩個字串的最長公共子串行

一,問題描述 給定兩個字串,求解這兩個字串的最長公共子串行 longest common sequence 比如字串1 bdcaba 字串2 abcbdab 則這兩個字串的最長公共子串行長度為4,最長公共子串行是 bcba 二,演算法求解 這是乙個動態規劃的題目。對於可用動態規劃求解的問題,一般有兩...

求解兩個字串的最長公共子串行

摘自 摘自 一,問題描述 給定兩個字串,求解這兩個字串的最長公共子串行 longest common sequence 比如字串1 bdcaba 字串2 abcbdab 則這兩個字串的最長公共子串行長度為4,最長公共子串行是 bcba 二,演算法求解 這是乙個動態規劃的題目。對於可用動態規劃求解的問...