Leetcode 1143 題 最長公共子串行

2021-10-12 17:50:06 字數 1174 閱讀 5655

題目描述

給定兩個字串 text1 和 text2,返回這兩個字串的最長公共子串行的長度。

乙個字串的子串行是指這樣乙個新的字串:它是由原字串在不改變字元的相對順序的情況下刪除某些字元(也可以不刪除任何字元)後組成的新字串。

例如,「ace」 是 「abcde」 的子串行,但 「aec」 不是 「abcde」 的子串行。兩個字串的「公共子串行」是這兩個字串所共同擁有的子串行。

若這兩個字串沒有公共子串行,則返回 0。

示例:輸入:text1 = 「abcde」, text2 = 「ace」

輸出:3

解釋:最長公共子串行是 「ace」,它的長度為 3。

思路分析

這道題給出了兩個字串,要求最長公共子串行,這裡的子串行要和子串做乙個區分,子串行不要求連續,而子串必須是連續的。

對於兩個字串比較求最值的問題,我們一般想到的就是動態規劃。我們舉個例子,假設 text1 = abcb,text2 = abc,將這兩個字串在平面以二維表的形式鋪展開來。

對於上圖中的數值,dp[0][1] == 1,表示 text1 == ab,text2 == a 時的最長公共子串行長度為1。dp[1][1] == 2,表示 text1 == ab,text2 == ab 時的最長公共子串行長度為2。要想獲得兩個字串的最長公共子串行長度,那麼就得先求得其子串中的最長公共子串行長度。通過分析,我們可以知道,當前位置 dp[i][j] 的最長公共子串行,和 dp[i - 1][j]、dp[i][j - 1]、dp[i - 1][j - 1]均有關係。

我們可以總結其狀態轉移方程:

當所在行和列兩字元不等時,當前狀態dp[i][j] = math.max(dp[i - 1][j], dp[i][j - 1])。

當所在行和列兩字元相等時,當前狀態dp[i][j] = dp[i - 1][j - 1] + 1。

**描述

class

solution

else}}

return dp[len1]

[len2];}

}

歡迎關注

LeetCode1143 最長公共子串行

題目描述 給定兩個字串 text1 和 text2,返回這兩個字串的最長公共子串行。乙個字串的 子串行 是指這樣乙個新的字串 它是由原字串在不改變字元的相對順序的情況下刪除某些字元 也可以不刪除任何字元 後組成的新字串。例如,ace 是 abcde 的子串行,但 aec 不是 abcde 的子串行。...

LeetCode 1143 最長公共子串行

給定兩個字串 text1 和 text2,返回這兩個字串的最長公共子串行。乙個字串的 子串行 是指這樣乙個新的字串 它是由原字串在不改變字元的相對順序的情況下刪除某些字元 也可以不刪除任何字元 後組成的新字串。例如,ace 是 abcde 的子串行,但 aec 不是 abcde 的子串行。兩個字串的...

最長公共子串行 LeetCode 1143

給定兩個字串 text1 和 text2,返回這兩個字串的最長公共子串行。若這兩個字串沒有公共子串行,則返回 0。乙個字串的子串行是指這樣乙個新的字串 它是由原字串在不改變字元的相對順序的情況下刪除某些字元 也可以不刪除任何字元 後組成的新字串。例如,ace 是 abcde 的子串行,但 aec 不...