问题:

题解:为应用动态规划,我们定义 dp[i][j] 为从 word1[0..i) 到word2[0..j)转换的的最小次数。
对于基本的情况,将一个字符串转换为一个空的字符串,所需操作的最小值就是字符串长度本身,因此很明显: dp[i][0]=i,dp[0][j]=j
对于一般情况,从 word1[0..i) 到 word2[0..j) ,假设我们已知了从 word1[0..i-1) 到 word2[0..j-1) 转换的次数,可以分两种情况讨论。
if word1[i] == word2[j]
此时的的情况就不用多讲,直接dp[i][j]=dp[i-1][j-1]就可以了。
if word1[i] != word2[j]
此时的情况比较复杂,有以下三种可能性。
下边含义理解为前边字符串转为后边字符串
(1) 替换。如ror和ros,此时进行替换操作,r->s,此时dp[i][j]=dp[i-1][j-1] + 1;
(2) 删除。如roee和ros,此时进行删除操作,delete s,此时dp[i][j]=dp[i-1][j] + 1
(3) 插入。如roe和ross,此时进行插入操作,insert s,此时dp[i][j]=dp[i][j-1] + 1
此时可以看出当word1[i] != word2[j] ,dp[i][j] = min(dp[i][j]=dp[i-1][j-1] , dp[i][j]=dp[i][j-1] , dp[i][j]=dp[i-1][j]) + 1
package com.example.demo;public class Test72 {/*** 两个字符串的编辑距离* e    5   4   4   3* s    4   3   3   2* r    3   2   2   2* o    2   2   1   2* h    1   1   2   3* ''   0   1   2   3* i/j  ''  r   o   s* 状态转移方程:* 当word1的第i个字符等于,word2的第j个字符,则* dp[i][j] = dp[i-1][j-1]* 当不等于时* dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1*/public int minDistance(String word1, String word2) {if (word1 == null || word2 == null) {return 0;}int len1 = word1.length();int len2 = word2.length();if (len1 == 0 || len2 == 0) {return len1 + len2;}int[][] dp = new int[len1 + 1][len2 + 1];// 初始化 当空串word1,转换为串word2需要的步数 ,即dp[0][j]// 初试话 当串word1,转换为空串word2需要的部署,即dp[i][0]for (int i = 0; i < len1 + 1; i++) {dp[i][0] = i;}for (int i = 0; i < len2 + 1; i++) {dp[0][i] = i;}// 动态规划状态转移方程for (int i = 1; i < len1 + 1; i++) {for (int j = 1; j < len2 + 1; j++) {if (word1.charAt(i - 1) == word2.charAt(j - 1)) {dp[i][j] = dp[i - 1][j - 1];} else {dp[i][j] = Math.min(dp[i - 1][j], Math.min(dp[i][j - 1], dp[i - 1][j - 1])) + 1;}}}return dp[len1][len2];}public static void main(String[] args) {Test72 t = new Test72();int i = t.minDistance("horse", "ros");System.out.println(i);}
}

leetcode-72-编辑距离相关推荐

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

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

  2. Java实现 LeetCode 72 编辑距离

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

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

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

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

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

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

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

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

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

  7. leetcode 72. 编辑距离

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

  8. [leetcode] 72.编辑距离

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

  9. LeetCode 72 编辑距离

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

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

最新文章

  1. 【Math】常见的几种最优化方法
  2. java web 教案_《Java web程序设计》教案.pdf
  3. JSON.parseObject(String str)与JSONObject.parseObject(String str)的区别
  4. 聊聊spring cloud gateway的GlobalFilter
  5. Linux下源码编译安装新版libxcb
  6. Abp Vnext Vue3 的版本实现
  7. Android 生成二维码,条形码,二维码添加logo
  8. redis——实战关注
  9. 宏基因组应用_宏基因组及宏转录组测序揭示极端环境微生物的生态学作用
  10. Matlab深度学习——安装deep learning toolbox工具箱
  11. graphpad饼状图_Graphpad Prism 堆叠图
  12. 计算机切换用户界面键,电脑切换用户_电脑切换用户快捷键
  13. Mortal Kombat Tower - 每天一把CF - 20200919
  14. 2020年最新版CSDN博客排名第一名的博客
  15. 在 Azure ML 上用 .NET 跑机器学习
  16. krpano限制场景视角
  17. 矩型窗、哈明窗、汉宁窗、莱克曼窗等一系列函数
  18. 我画了近百张图来理解红黑树
  19. 使用标准C++ 生成一个循环输出数字格式化前面补零的简单demo
  20. 888道Java高级面试题,java邮件全部解析eml

热门文章

  1. oracle汽车排量怎么写,这样的表中的数据怎样排量修改啊。
  2. MySQL 索引和 SQL 调优手册
  3. 为什么非全站升级HTTPS不可?
  4. 开发做甲方还是乙方_建筑行业的职场小白求职时是选择做甲方还是乙方?
  5. html表格边框设置波浪线,SVG CSS3 按钮悬停边线环绕+波浪线+选择框动效
  6. image转pixmap qt_Qt 编程指南10 QImage Mat QPixmap转换
  7. mybatis 默认参数名#{0}、#{arg0}、#{param1},以及@Param
  8. python qcut_Python之Pandas库学习(三):数据处理
  9. app 隔几秒记录当前经纬度位置_uni-app获取位置经纬度并定位到当前位置
  10. c语言单词字母翻转,C语言来实现字符串反转(只有单词反转,单词里的字母不反转)...