题目:

给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。

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

  1. 插入一个字符
  2. 删除一个字符
  3. 替换一个字符
输入: word1 = "horse", word2 = "ros"
输出: 3
解释:
horse -> rorse (将 'h' 替换为 'r')
rorse -> rose (删除 'r')
rose -> ros (删除 'e')
输入: word1 = "intention", word2 = "execution"
输出: 5
解释:
intention -> inention (删除 't')
inention -> enention (将 'i' 替换为 'e')
enention -> exention (将 'n' 替换为 'x')
exention -> exection (将 'n' 替换为 'c')
exection -> execution (插入 'u')

分析:

本题目符合动态规划思想:原问题可以拆分成重叠的子问题进行解决,我们使用动态规划四步法:

1、刻画一个最优解的结构特征

2、递归定义最优解的值

3、计算最优解的值,通常采用自底向上的方法

4、利用计算出的信息构造一个最优解

(引自算法导论)

步骤一:刻画编辑距离的特征

horse -> ros 可由 [horse->rose子问题]->ros 组成,而[horse->rose子问题] 又可由它的子问题[horse->rorse子问题]->rose 组成,于是可构造递推公式 Mn=Mn-1+min(.),也就是说本次变换只跟 [上次已完成的变换] 和 [本次操作] 有关。

步骤二:分析递归解

word1每个字符的下标使用i表示 word2 每个字符下标使用j表示,我们将word1对应word2的字符的每次变换使用二维数组e[][]表示,其中:

e[i][j] = word1[i]转换到word2[j]的最小操作次数

那么操作方式有三种insert插入、delete删除、replace替换,我们只需选择其中最小的操作次数记录下来,即:

e[i][j] = min(insert,delete,replace)

下面分析完整递归解:

e[i][j] = i ; (当j=0时_①)j ; (当i=0时_②)e[i - 1][j - 1] ;(当word1[i]=word2[j]时_③) min (  e[i][j - 1] + 1 ,  e[i - 1][j] + 1 ,  e[i - 1][j - 1] + 1  ); (当word1[i]!=word2[j]_④)注:①当j=0时,即由word1的任何字符变换到空时为删除,word1[i]->null,删除次数就是word1的索引 i ;②当i=0时,即由空变换到word2的任何字符时为插入,null->word2[j],插入次数就是word2的索引 j ; ③当word1[i]=word2[j]时,不做插入,延续上次操作次数;④当word1[i]!=word2[j]时:其中第一项insert:从word1[i]->word2[j]的插入操作只需在word2上一次操作基础上增加一次,word1不变;其中第二项delete:从word1[i]->word2[j]的删除操作只需在word1上一次操作基础上增加一次,word2不变;其中第三项replace:从word1[i]->word2[j]的修改操作意味着,在两个字符串上一次操作基础之上做一次插入。
步骤三、四:计算编辑距离、返回最终解java代码

    public int minDistance(String word1, String word2) {int[][] e = new int[word1.length() + 1][word2.length() + 1];for (int i = 1; i <= word1.length(); i++)e[i][0] = i;for (int j = 1; j <= word2.length(); j++)e[0][j] = j;for (int i = 1; i <= word1.length(); i++) {for (int j = 1; j <= word2.length(); j++) {// 因为变换是从空字符串开始的而不是从word1[0]和word2[0]处开始的,所以i,j变换的实际是i-1,j-1处的字符,所以charAt索引要减一if (word1.charAt(i - 1) == word2.charAt(j - 1))e[i][j] = e[i - 1][j - 1];elsee[i][j] = Math.min(e[i][j - 1], Math.min(e[i - 1][j], e[i - 1][j - 1])) + 1;}}return e[word1.length()][word2.length()];}

[leetcode] 72.Edit Distance 编辑距离-史前最简明清晰的解答相关推荐

  1. 【重点!记忆化递归+DP】LeetCode 72. Edit Distance

    LeetCode 72. Edit Distance 参考链接:https://zxi.mytechroad.com/blog/dynamic-programming/leetcode-72-edit ...

  2. LeetCode(72)Edit Distance

    题目 Given two words word1 and word2, find the minimum number of steps required to convert word1 to wo ...

  3. [LeetCode] One Edit Distance 一个编辑距离

    Given two strings S and T, determine if they are both one edit distance apart. 这道题是之前那道Edit Distance ...

  4. LeetCode 72. Edit Distance--动态规划--Levenshtein Distance Algorithm--Java,Python解法

    此题链接:Edit Distance - LeetCode LeetCode 动态规划(Dynamic programming)系列题目:LeetCode 动态规划(Dynamic programmi ...

  5. Edit Distance编辑距离(NM tag)- sam/bam格式解读进阶

    sam格式很精炼,几乎包含了比对的所有信息,我们平常用到的信息很少,但特殊情况下,我们会用到一些较为生僻的信息,关于这些信息sam官方文档的介绍比较精简,直接看估计很难看懂. 今天要介绍的是如何通过b ...

  6. 72. Edit Distance

    ref: https://discuss.leetcode.com/topic/3136/my-o-mn-time-and-o-n-space-solution-using-dp-with-expla ...

  7. leetcode Edit Distance

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4051082.html 题目链接:leetcode Edit Distance 最短编辑距离, ...

  8. 字符串编辑距离(Edit Distance)

    一.问题描述 定义 字符串编辑距离(Edit Distance),是俄罗斯科学家 Vladimir Levenshtein 在 1965 年提出的概念,又称 Levenshtein 距离,是指两个字符 ...

  9. 详解编辑距离(Edit Distance)及其代码实现

    概述 编辑距离(Minimum Edit Distance,MED),由俄罗斯科学家 Vladimir Levenshtein 在1965年提出,也因此而得名 Levenshtein Distance ...

最新文章

  1. Java项目:网上水果蔬菜项目系统设计和实现(java+springboot+mysql+ssm)
  2. python中any的妙用
  3. IT新人如何快速成长
  4. 洛谷 P1294 高手去散步-邻接矩阵+dfs-求无向图的一条最长路径
  5. CentOS上安装mysql5.5.23
  6. 2299元 OPPO K3 8GB+256GB版本线上线下同步开售
  7. 谁敢动英伟达的奶酪?AI芯片领域,这12家创业公司值得关注
  8. android配置多个url,Retrofit中使用多个baseUrl
  9. 智能优化算法应用:基于麻雀搜索算法与非完全beta函数的自适应图像增强算法 - 附代码
  10. 遗传算法的c语言实现,基本遗传算法的C语言实现
  11. XTU 1271 Color
  12. 申论(写作篇)之花木体申论写作法
  13. 计算机管理里面的“服务”怎么删除?
  14. 深入理解L0,L1和L2正则化
  15. 1148: 考试晋级(java版)
  16. centos7几种版本x86_64、aarch64、armhfp、i386、power9、ppc64、ppc64el简单说明
  17. 网站关键词html代码,html网站代码+网站关键词如何优化呢
  18. 灵眸action_大疆 Osmo Action 灵眸运动相机评测:GoPro 终于有了像样的对手
  19. ZeroTier禁用直连----强制使用Moon
  20. SUMPRODUCT函数的经典用法

热门文章

  1. python爬视频选择清晰度_Python爬取新浪微博博主高清视频
  2. 使用heroku部署项目
  3. 求极限中比较常见的等价无穷小的记忆
  4. Spring Security Oauth2系列(七)
  5. 智慧疫情防控平台(图形化编程mind+)
  6. 培训(Training)是企业成功的重要法宝
  7. SCD节点产品化实现
  8. curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to raw.gith
  9. Win7电脑系统崩溃怎么解决?
  10. 北航计算机测试控制智能车,“车路协同环境下车辆群体智能控制理论与测试验证”项目顺利通过科技部中期检查...