77 最長公共子串行

2022-02-14 21:23:29 字數 2208 閱讀 1550

中文english

給出兩個字串,找到最長公共子串行(lcs),返回lcs的長度。

樣例 1:

輸入: "abcd" and "edca"

輸出: 1

解釋:lcs 是 'a' 或 'd' 或 'c'

樣例 2:

輸入: "abcd" and "eacb"

輸出: 2

解釋:

lcs 是 "ac"

最長公共子串行的定義:

輸入測試資料 (每行乙個引數)如何理解測試資料?

第乙個版本:同向型雙指標

存在弊端,它前面匹配成功,則直接會跳到後面去匹配,按照a的字串順序在b字串進行匹配

class

solution:

""" @param a: a string

@param b: a

string

@return: the length of longest common subsequence of a and b

"""'''

存在弊端:

可能後面的匹配後面的某乙個字元會更長,他只會按照前面第乙個符合條件的即返回

'''def longestcommonsubsequence(self, a, b):

#檢測邊界

ifnot a or not b:

return

0#初始條件

l =len(a)

d = [1] *len(a)

max_num = 0

#計算順序

for i in

range(l):

j =b.find(a[i])

#邊界情況

if j != -1

: max_num =max(self.getcommonsubsequence(a[i:],b[j:],i,j),max_num)

return

max_num

def getcommonsubsequence(self,a,b,i,j):

#傳入切割後的a和b進來

p = 0

j = 0

for i in

range(len(a)):

if a[i] in

b[j:]:

p += 1

j +=b[j:].find(a[i])

return p

注:lintcode不通過,方法不可行

第二個版本:動態規劃(匹配型動態規劃)

class

solution:

""" @param a: a string

@param b: a

string

@return: the length of longest common subsequence of a and b

"""def longestcommonsubsequence(self, a, b):

# write your code here

#動態規劃,匹配型

#初始化

len1, len2 =len(a), len(b)

#存在null的情況

dp = [[0

for _ in range(len2 + 1)] for _ in range(len1 + 1

)]

#計算順序

for i in range(1,len1 + 1

):

for j in range(1, len2 + 1

): #如果兩者不相等,只需要判斷最大即可

dp[i][j] = max(dp[i - 1][j], dp[i][j - 1

]) #如果該a和b的字元相等,則是上乙個字元加1,dp[i][j]表示的是在a的前i個字串中,匹配j的最長個數

if (a[i - 1] == b[j -1

]): #毫無疑問,這裡+1肯定是最大的,會一直更新,直到最後

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

return

dp[len1][len2]

lintcode77 最長公共子串行

給出兩個字串,找到最長公共子串行 lcs 返回lcs的長度。樣例 樣例 1 輸入 abcd and edca 輸出 1 解釋 lcs 是 a 或 d 或 c 樣例 2 輸入 abcd and eacb 輸出 2 解釋 lcs 是 ac 說明最長公共子串行的定義 最長公共子串行問題是在一組序列 通常2...

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

1 最長公共子串行 採用動態規劃的思想,用乙個陣列dp i j 記錄a字串中i 1位置到b字串中j 1位置的最長公共子串行,若a i 1 b j 1 那麼dp i j dp i 1 j 1 1,若不相同,那麼dp i j 就是dp i 1 j 和dp i j 1 中的較大者。class lcs el...

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

1.區別 找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。而最長公共子串行則並不要求連續。2 最長公共子串 其實這是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公...