• 【力扣 068】72. 编辑距离


    72. 编辑距离

    给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数  。

    你可以对一个单词进行如下三种操作:

    插入一个字符
    删除一个字符
    替换一个字符
     

    示例 1:

    输入:word1 = "horse", word2 = "ros"
    输出:3
    解释:
    horse -> rorse (将 'h' 替换为 'r')
    rorse -> rose (删除 'r')
    rose -> ros (删除 'e')
    示例 2:

    输入:word1 = "intention", word2 = "execution"
    输出:5
    解释:
    intention -> inention (删除 't')
    inention -> enention (将 'i' 替换为 'e')
    enention -> exention (将 'n' 替换为 'x')
    exention -> exection (将 'n' 替换为 'c')
    exection -> execution (插入 'u')
     

    提示:

    0 <= word1.length, word2.length <= 500
    word1 和 word2 由小写英文字母组成

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/edit-distance
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解题思路:

    class Solution {
    public:
      int minDistance(string word1, string word2)
      {
        int m = word1.size(), n = word2.size();
        vector<vector<int>> dp(m + 1, vector<int>(n + 1));
        for (int i = 1; i <= n; ++i)
          dp[0][i] = i;
        for (int i = 1; i <= m; ++i)
          dp[i][0] = i;
        for (int i = 1; i <= m; ++i)
        {
          for (int j = 1; j <= n; ++j)
          {
            int left = dp[i][j - 1] + 1;
            int up = dp[i - 1][j] + 1;
            int mid;
            if (word1[i - 1] == word2[j - 1])
              mid = dp[i - 1][j - 1];
            else
              mid = dp[i - 1][j - 1] + 1;
            dp[i][j] = min(min(left, up), mid);
          }
        }
        return dp[m][n];
      }
    };

    参考资料

    1. 最短编辑距离问题 - 动态规划方法及打印

  • 相关阅读:
    java的学习笔记
    tomcat配置方法
    《编写高质量代码》学习笔记
    Servlet的学习笔记
    Http协议的学习笔记
    树莓派开箱使用分享以及一些心得
    树莓派的骚操作
    Linux的学习笔记
    msyql高级的学习笔记
    项目业务记录
  • 原文地址:https://www.cnblogs.com/sunbines/p/16301213.html
Copyright © 2020-2023  润新知