最長連續公共子陣列,子串,本科001

2021-10-22 09:09:29 字數 768 閱讀 8344

2、關鍵字

3、思路

4、notes

5、複雜度

6、code

718最長連續公共子串,

給兩個整數陣列 a 和 b ,返回兩個陣列中公共的、長度最長的子陣列的長度。

示例:輸入:

a: [1,2,3,2,1]

b: [3,2,1,4,7]

輸出:3

解釋:長度最長的公共子陣列是 [3, 2, 1] 。

的鏈結

最長,公共子串,連續

經典dp,

按第乙個串初始化第一行,遍歷第乙個串,與第二個串的首元素進行比較,如果相等就初始化為1,不等就初始化為0,

按第二個串初始化第一列,與第乙個串的首元素比較,如果相等就初始化為1,不等就初始化為0,

然後兩層迴圈遍歷二維dp陣列,把最大值搞出來輸出就好了,

還有乙個求兩個字串的最長公共子串,不要求連續,

只是不相等的時候當前值的處理不同,這個題是直接置0,而不連續的是取左邊和上邊的最大值,

相等的時候都是取左上元素+1

連續時間o(nm)

空間o(nm)

class

solution

}for

(int j=

0;jfor(

int i=

1;i)else

res=

max(res,dp[i]

[j]);}

}return res;}}

;

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

用二維陣列c i j 記錄串x1 x2 x i x1x2 xi與y 1y 2 y j y1y2 yj 的lcs長度,則可得到狀態轉移方程c i,j 0c i 1 j 1 1max c i,j 1 c i 1,j i 0 orj 0i,j 0a ndxi y j i,j 0a ndxi y j pub...

求最長連續公共子串

說到求最長公共子串首先想到的是逐個子串比較,但是那樣的話演算法的複雜度太高,後來就想到用矩陣的方法去解決 思路如下 比如字元創a abcdefg 和字串b bdeabc 建立矩陣如下圖所示 發現如果連續的斜線值為1的長度最長的話 則為最長公共子串 則abc為最長公共子串 那我們可把矩陣進化為 我們在...

最長公共連續子串

這是兩個字串,所以狀態轉移矩陣肯定是二維矩陣。另外dp i j 代表的意思不是分別乙個字串的前 i 個和另乙個字串的前 j 個字元裡面的最長連續子串。而是以a i 和b j 為末端的公共連續子串長度。如果dp i j 代表是目前最長連續子串,那麼遞推公式就寫不出來,因為不知道dp i j 中公共子串...