LeetCode1143 最長公共子串行

2021-09-29 20:22:59 字數 1341 閱讀 8652

題目描述

給定兩個字串 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。

思路:動態規劃

(1)子問題劃分

①如果text1和text2的最後乙個字母相同,則最大子串行就是text1和text2的最大子串行+1

②如果text1和text2的最後乙個字母不相同:

a.text1與text2的最大子串行

b.text1與text2的最大子串行

以上兩個可能值取較大的。

(2)dp方程

模擬用乙個二維陣列將兩個字串存為第一行和第一列,二維陣列的元素表示兩個字串對應位置上的最大子串行的值。

dp方程:

if

(s1[i -1]

== s2[j -1]

)else

**:

public

intlongestcommonsubsequence

(string text1, string text2)

else}}

return dp[s1.length]

[s2.length]

;}

LeetCode 1143 最長公共子串行

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

最長公共子串行 LeetCode 1143

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

Leetcode 1143 最長公共子串行

題目鏈結 dp思路引導 咋說呢,當你列了乙個二維dp時,往往都會考慮左上方的三個框框對這個框的遞推。同型別見 第190場周賽 leetcode 1458 兩個子串行的最大點積 做了幾道之後,你就會覺得它很經典。本題具體思路 定義 dp i j 表示text1 0 i 和text2 0 j 的最長公共...