代码随想录算法训练营第五十六天 |583. 两个字符串的删除操作、72. 编辑距离
583. 两个字符串的删除操作
题目链接:583. 两个字符串的删除操作
- dp含义:以i-1为结尾的word1,j-1为结尾的word2相同的最小操作数
- 初始化要注意,<= len1;
- 递推公式:
- 另一个思路:
- 最长公共子序列 多余的元素就需要删除
72. 编辑距离
题目链接:72. 编辑距离
- dp含义:以i-1为结尾的word1,j-1为结尾的word2相同的最小操作数
- 递推公式和删除略有不同,除了删除还有替换
-
class Solution { public: vector<vector<int>> memo; int minDistance(string word1, string word2) { int m = word1.size(); int n = word2.size(); vector<vector<int>> dp(m + 1, vector<int>(n + 1)); for(int i = 0; i <= m; i++) { dp[i][0] = i; } for(int j = 0; j <= n; j++) { dp[0][j] = j; } for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { if (word1[i - 1] == word2[j - 1]) { dp[i][j] = dp[i - 1][j - 1]; } else { dp[i][j] = min( dp[i - 1][j - 1], min(dp[i - 1][j], dp[i][j - 1]) ) + 1; } } } return dp[m][n]; } };