代码随想录算法训练营第五十六天 |583. 两个字符串的删除操作、72. 编辑距离

52 阅读1分钟

代码随想录算法训练营第五十六天 |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];
         } 
     };