題目描述
給定兩個字串 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 的最長公共...