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’)

class Solution {public int minDistance(String word1, String word2) {int len1 = word1.length();int len2 = word2.length();//处理有空字符串的特殊情况if (len1 * len2 == 0)return len1 + len2;String longerStr = len1 > len2 ? word1 : word2;String shorterStr = len1 > len2 ? word2 : word1;int shorterOne = Math.min(len1, len2);//dp数组长度为两字符串中长度较小的那个int[] dp = new int[shorterOne + 1];//初始化dp数组for (int i = 0; i < shorterOne + 1; i++) {dp[i] = i;}//从长度较长的字符串开始遍历,注意j从1开始,取第j-1位字符,因此结束位置是 longerStr.length()for (int j = 1; j <= longerStr.length(); j++) {// 每次遍历短字符串前,先给left赋初始值int left = j;//遍历长度较短的字符串,同样从1开始,取第i-1位字符,因此结束位置是 shortStr.length()for (int i = 1; i <= shorterStr.length(); i++) {int updateDown = dp[i] + 1;int updateLeft = left + 1;int updateLeftDown = dp[i - 1];//如果当前字符不匹配,左下角的那个值要加一,表示替换当前字符if (longerStr.charAt(j - 1) != shorterStr.charAt(i - 1)) {updateLeftDown++;}//获取较小的那个int min = Math.min(updateLeft, Math.min(updateDown, updateLeftDown));//因为 dp[i - 1]后面用不到了,替换为当前的left值dp[i - 1] = left;//如果遍历到最后一个时,直接更新dp[i]if(i == dp.length - 1){dp[i] = min;}else{//否则更新左边的值,而不是直接更新 dp[i],因为下个循环需要用到原来的 dp[i]以及刚更新的leftleft = min;}}}return dp[shorterOne];}
}

Java实现 LeetCode 72 编辑距离相关推荐

  1. [leetcode] 72. 编辑距离(二维动态规划)

    72. 编辑距离 再次验证leetcode的评判机有问题啊!同样的代码,第一次提交超时,第二次提交就通过了! 此题用动态规划解决. 这题一开始还真难到我了,琢磨半天没有思路.于是乎去了网上喵了下题解看 ...

  2. LeetCode 72. 编辑距离(DP)

    1. 题目 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示 ...

  3. 2022-3-22 Leetcode 72.编辑距离

    class Solution {public:int minDistance(string word1, string word2) {int n = word1.length();int m = w ...

  4. 123. Leetcode 72. 编辑距离 (动态规划- 字符串系列)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i][j]表示word1[:i]的单词与word2[:j]单词之间的最小编辑距离 步骤二.推断状态方程: 在确定递推公式的时候,首先要考虑清楚编辑的几 ...

  5. LeetCode 72.编辑距离(动态规划)

    编辑距离 针对两个字符串(如英文字母)的差异程度的量化测量,量测方式是看至少需要多少次的处理才能将一个字符串变成另一个字符串. 编辑距离应用 一.可应用于NLP,如拼写检查可以根据一个拼错的字和其他正 ...

  6. leetcode 72. 编辑距离

    /***** 定义状态: DP[i][j]其中i表示word1前i个字符,j表示Word2前i个字符 DP[i][j]表示单词1前i个字符匹配单词2前j个字符,最少变换次数: 状态转移: for i: ...

  7. [leetcode] 72.编辑距离

    给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: ...

  8. LeetCode 72 编辑距离

    思路:动态规划 class Solution { public:int minDistance(string word1, string word2) { int dp[501][501]; for( ...

  9. ⭐算法入门⭐《动态规划 - 串匹配》困难02 —— LeetCode 72. 编辑距离

最新文章

  1. Apriori算法、FP-Growth算法、顺序分析、PrefixSpan算法
  2. mysql数据库优化课程---16、mysql慢查询和优化表空间
  3. git 切换成远程分支
  4. SQL Server复制需要有实际的服务器名称才能连接到服务器
  5. jsp + js + 前端弹出框
  6. Spring Framework(框架)整体架构
  7. iphone静音键失灵_你知道iPhone手机中哪些一般人不知道的功能?
  8. i18n - why Chinese resource will be loaded by default
  9. 男人是消耗品,女人是战利品?
  10. 海天食品的java开发工作如何_再三个月就秋招了,我想找一份java开发工作,现在应该怎么准备一下?...
  11. 我慕了!腾讯大手一挥,员工买房最高可申请免息借款90万
  12. (转)ATOM介绍和使用
  13. 随想录(skyeye中的soc仿真)
  14. 找到软件供应链的薄弱链条
  15. 测试用例设计方法-正交试验常用正交表
  16. 图像标注工具labelImg安装教程及使用方法
  17. Unity 接入图灵机器人
  18. element ui Descriptions 组件无法显示样式 未渲染
  19. 什么是营销SaaS?
  20. Ubuntu启动项管理

热门文章

  1. 超级计算机数值预报,超级计算机“天河一号”助力我国雾霾监测预报
  2. b站点赞服务器,B站提高点赞方法步骤,教你轻松实现刷B站点赞
  3. IO多路复用机制——epoll
  4. 《智能控制》期末复习笔记(二)
  5. UWB定位项目怎么评估定位基站数量
  6. 先到先服务-作业调度算法-c++ 数组
  7. 顺丰科技 x StarRocks :双十一实时运单分析实践
  8. redis 集群 (cluster) 原理
  9. Vue之数据的双向绑定
  10. 软考高级论文如何准备