力扣 最長重複子陣列和最長公共子串行(動態規劃)

2021-10-07 16:05:10 字數 1170 閱讀 1723

給兩個整數陣列 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個位...