LeetCode 1143.最長公共子序列
題目描述:
給定兩個字串 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.length <= 1000
1 <= text2.length <= 1000
輸入的字串只含有小寫英文字元。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/longest-common-subsequence
分析:
典型的dp問題:
兩個字串s1,s2。
若s1[i]==s2[j],則該字元在公共子序列中,dp[i][j]=dp[i-1][j-1]+1。
若不相等,則dp[i][j]=max(dp[i][j-1],dp[i-1][j])。
方法一:
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
int m=text1.length();
int n=text2.length();
int dp[m+1][n+1];
for(int i=0;i<=m;i++){
dp[i][0]=0;
}
for(int j=0;j<=n;j++){
dp[0][j]=0;
}
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if(text1[i-1]==text2[j-1]){
dp[i][j]=1+dp[i-1][j-1];
}
else{
dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
}
}
}
return dp[m][n];
}
};
相關文章
- 力扣1143. 最長公共子序列 動態規劃之最長公共子序列力扣動態規劃
- 最長公共子序列
- 最長公共子序列(JAVA)Java
- 【LeetCode動態規劃#14】子序列系列題(最長遞增子序列、最長連續遞增序列、最長重複子陣列、最長公共子序列)LeetCode動態規劃陣列
- 最長公共子序列求方案數
- java 實現 最長公共子序列Java
- 最長公共子序列 Longest Common Subsequence
- 線性dp:最長公共子序列
- 動態規劃-最長公共子序列動態規劃
- 動態規劃——最長公共子序列動態規劃
- 最長公共子序列LCS 輸出所有LCS
- 51Nod 1006 最長公共子序列Lcs
- 動態規劃(最長公共子序列LCS)動態規劃
- 最長公共子序列你學會了嗎
- LeetCode516. 最長迴文子序列LeetCode
- [題解]P1439 【模板】最長公共子序列
- 字串篇(python)—兩個字串的最長公共子序列字串Python
- 最長公共子序列問題—動態規劃sdut動態規劃
- LeetCode最長公共字首(Python)LeetCodePython
- 每日leetcode——最長公共字首LeetCode
- 動態規劃經典問題----最長公共子序列動態規劃
- 51nod-基因匹配+luogu-【模板】最長公共子序列
- lCS(最長公共子串)
- LeetCode-14. 最長公共字首LeetCode
- leetcode14.最長公共字首LeetCode
- 最長上升子序列
- 詳解動態規劃最長公共子序列--JavaScript實現動態規劃JavaScript
- 經典演算法題每日演練——最長公共子序列演算法
- 線性dp:LeetCode516 .最長迴文子序列LeetCode
- #LeetCode14. 最長公共字首 @FDDLCLeetCode
- [譯] Swift 演算法學院 - 最長公共子序列演算法Swift演算法
- 程式碼隨想錄演算法訓練營day44| 1143.最長公共子序列 1035.不相交的線 53. 最大子序和 392.判斷子序列演算法
- 程式碼隨想錄演算法訓練營第50天 | 1143.最長公共子序列 、1035.不相交的線 、53. 最大子序和、392.判斷子序列演算法
- 線性dp:最長公共子串
- [Java] 藍橋杯ADV-202 演算法提高 最長公共子序列Java演算法
- 領釦LintCode演算法問題答案-77. 最長公共子序列演算法
- LeetCode——python3最長公共字首——2020.11.24LeetCodePython
- 動態規劃之最長公共子序列求解動態規劃