給兩個整數陣列 a 和 b ,返回兩個陣列中公共的、長度最長的子陣列的長度。
示例 1:
輸入:a: [1,2,3,2,1]
b: [3,2,1,4,7]
輸出: 3
解釋:長度最長的公共子陣列是 [3, 2, 1]。
最長重複子陣列是需要連續的,遞推公式為dp[i][j] = dp[i-1][j-1] + 1;
最長公共子串行是不需要連續的,遞推公式為 dp[i][j] = max(dp[i-1][j-1]+(text2[i - 1] == text1[j - 1]?1:0),dp[i-1][j],dp[i][j-1])
class
solution
;int ans =0;
for(
int i =
1;i<=al;i++)}
return ans;}}
;
給定兩個字串 text1 和 text2,返回這兩個字串的最長公共子串行的長度。
乙個字串的 子串行 是指這樣乙個新的字串:它是由原字串在不改變字元的相對順序的情況下刪除某些字元(也可以不刪除任何字元)後組成的新字串。
例如,「ace」 是 「abcde」 的子串行,但 「aec」 不是 「abcde」 的子串行。兩個字串的「公共子串行」是這兩個字串所共同擁有的子串行。
若這兩個字串沒有公共子串行,則返回 0。
示例 1:
輸入:text1 = 「abcde」, text2 = 「ace」
輸出:3
解釋:最長公共子串行是 「ace」,它的長度為 3。
示例 2:
輸入:text1 = 「abc」, text2 = 「abc」
輸出:3
解釋:最長公共子串行是 「abc」,它的長度為 3。
示例 3:
輸入:text1 = 「abc」, text2 = 「def」
輸出:0
解釋:兩個字串沒有公共子串行,返回 0。
int dp[
1010][
1010]=
;class
solution
else}}
return dp[r]
[c];}}
;
最長重複子串,最長公共子串行, 最長公共子串
原題 首先這是乙個單字串問題。子字串r 在字串l 中至少出現兩次,則稱r 是l 的重複子串。重複子串又分為可重疊重複子串和不可重疊重複子串,這裡只是簡單討論最長可重疊的重複子串,給出基本演算法。最長重複子串 用最笨的方法,逐個掃瞄,時間複雜度o n 2 如下,親測可用 int lcs comlen ...
力扣 718 最長重複子陣列
給兩個整數陣列 nums1 和 nums2 返回 兩個陣列中 公共的 長度最長的子陣列的長度 示例 1 輸入 nums1 1,2,3,2,1 nums2 3,2,1,4,7 輸出 3 解釋 長度最長的公共子陣列是 3,2,1 示例 2 輸入 nums1 0,0,0,0,0 nums2 0,0,0,0...
最長公共子串行 最長重複子串
最長公共子串行 longest common subsquence s1 a b d a c e s2 b a b c e lcs abce abce 長度4 1 brute force 遞迴解法 從單個字元解決問題 某位置處若兩字元相等,則同時序號增加,最長長度 1 若不相等,則需要s1增加1個位...