字串中最長公共子串行和最長公共子串

2021-09-04 04:40:11 字數 1587 閱讀 5818

例:bdcaba和abcbdab,最長公共子串行為 bcba。

dp解法:字串1的長度為length1,字串2的長度為length2,建立乙個二維陣列c[length1][length2]用來記錄最長公共子串行的長度,狀態轉移方程為

整個狀態轉移以及二維陣列矩陣c為

# 生成字串長度加1的0矩陣,m用來儲存對應位置匹配的結果

length1 = len(s1)

length2 = len(s2)

result = ''

c = [[0 for x in range(length2 + 1)] for y in range(length1 + 1)]

for i in range(length1):

for j in range(length2):

if s1[i] == s2[j]:

c[i+1][j+1] = c[i][j] + 1

else:

c[i+1][j+1] = max(c[i][j+1], c[i+1][j])

print("max length: ", c[length1][length2])

find_lcseque('abcbdab', 'bdcaba')

子串是一種特殊的子串行,同樣可以由dp做。

二維陣列的定義如上,狀態轉移方程為

最大長度為result,初始值為0,當

# 生成字串長度加1的0矩陣,m用來儲存對應位置匹配的結果

length1 = len(s1)

length2 = len(s2)

substr_length = 0

c = [[0 for x in range(length2 + 1)] for y in range(length1 + 1)]

for i in range(length1):

for j in range(length2):

if s1[i]==s2[j]:

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

substr_length = max(c[i][j], substr_length)

else:

c[i][j] = 0

print("substr max length: ", substr_length)

find_lcssubstr('abcbdab', 'bdcaba')

最長公共字串和最長公共子串行

給出兩個字串,找到最長公共子串,並返回其長度。建立乙個矩陣來儲存兩個字串出現相同字元的地方,比如 abccd 和 abcefc 就有 abccd a10000 b02000 c00300 e00040 f00000 c00100 這樣就有每次遇到相等的都加上下他的斜上方的位置的值,然後使用乙個max...

最長公共子串和最長公共子串行

二者含義沒搞清楚,雅虎的筆試就這樣的寫錯了。求最長公共字串的題目寫成了最長公共子串行。子串要求字元必須是連續的,但是子串行就不是這樣了。悲催了。子串行跟子串的求法類似,都是使用動態規劃的思想,s1每次增加乙個字元,看與s2當前位置的字元是不是相同,如果相同做相應的處理,如果不同,做另外的處理。子串行...

最長公共子串行和最長公共子串

問題定義 最長公共子串行,序列的意思是順序對就可以,並不需要是連續的。例如 abcde oalblcldle其中abcde就是這兩個字串的最長公共子串行。容易知道乙個長度為n的字串的子串行有2 n 個,假設兩個字串的長度都為n,直接去求解兩個字串的最長公共子串行需要用這2 n 個序列串去匹配另外乙個...