力扣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。
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
int n=text1.size();
int m=text2.size();
int dp[n+1][m+1];
for(int i=0;i<=n;i++){
dp[i][0]=0;
}
for(int j=0;j<=m;j++){
dp[0][j]=0;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(text1[i-1]==text2[j-1]){//字串陣列下標是0到length-1
dp[i][j]=dp[i-1][j-1]+1;
}else{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
return dp[n][m];
}
};
一、確定狀態
狀態:序列1的長度i,和序列2的長度j
子問題描述:
二、轉移方程
其實想要糾正一下,字串陣列中下標是0到i-1的,如果1到i,不僅第一個字元讀不到,還會讀到最後一個結束符‘\0’,這裡把我坑了…
三、初始狀態、邊界
陣列大小dp[n+1][m+1],n、m是字串長度
四、如何遍歷、結果
逐行遍歷,結果dp[n][m]
求解最優子序列怎麼得到
按方向劃分,存放進陣列b[n][m],求解子序列
相關文章
- 動態規劃之最長公共子序列求解動態規劃
- 動態規劃-最長公共子序列動態規劃
- 動態規劃——最長公共子序列動態規劃
- [演算法筆記]動態規劃之最長公共子串和最長公共子序列演算法筆記動態規劃
- 動態規劃(最長公共子序列LCS)動態規劃
- 最長公共子序列問題—動態規劃sdut動態規劃
- 動態規劃經典問題----最長公共子序列動態規劃
- 最長公共子序列
- 詳解動態規劃最長公共子序列--JavaScript實現動態規劃JavaScript
- 最長公共子序列&迴文字串 nyoj動態規劃字串動態規劃
- 最長公共子序列(JAVA)Java
- LeetCode 1143.最長公共子序列LeetCode
- 【LeetCode動態規劃#14】子序列系列題(最長遞增子序列、最長連續遞增序列、最長重複子陣列、最長公共子序列)LeetCode動態規劃陣列
- 動態規劃:最長上升子序列動態規劃
- 最長上升子序列動態規劃動態規劃
- 以最長公共子序列問題理解動態規劃演算法(DP)動態規劃演算法
- “最長公共字串子序列”問題的動態規劃法演算法字串動態規劃演算法
- java 實現 最長公共子序列Java
- 最長公共子序列求方案數
- 線性dp:最長公共子序列
- 淺談最長公共子序列引發的經典動態規劃問題動態規劃
- 動態規劃-最長上升子序列模型動態規劃模型
- 演算法題:最長公共子序列演算法
- 動態規劃7:最長上升子序列LIS動態規劃
- LCS 演算法:Javascript 最長公共子序列演算法JavaScript
- 最長公共子序列的程式碼實現
- 動態規劃求解最長上升子序列問題動態規劃
- 最長公共子序列,遞迴簡單程式碼遞迴
- [題解]P1439 【模板】最長公共子序列
- hud1151 動態規劃 最大的公共子序列動態規劃
- python 動態規劃(揹包問題和最長公共子串)Python動態規劃
- 字串篇(python)—兩個字串的最長公共子序列字串Python
- 51nod-基因匹配+luogu-【模板】最長公共子序列
- lCS(最長公共子串)
- 經典演算法題每日演練——最長公共子序列演算法
- [譯] Swift 演算法學院 - 最長公共子序列演算法Swift演算法
- 動態規劃求最長降序序列動態規劃
- 最長上升子序列