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 中公共子串...