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

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

  1. 插入一个字符
  2. 删除一个字符
  3. 替换一个字符

示例 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'网易面试时遇到了这题,当时没做出来,想不出来状态转移方程。解题思路如下:

首先定义状态矩阵,dp[m][n],其中m为word1的长度+1,n为word2的长度+1,为什么+1?因为要考虑如果word1或word2为空的情况,后面可以看到。

定义dp[i][j]为word1中前i个字符组成的串,与word2中前j个字符组成的串的编辑距离。

插入操作:在word1的前i个字符后插入一个字符,使得插入的字符等于新加入的word2[j]。这里要考虑清楚,插入操作对于原word1字符来说,i是没有前进的,而对于word2来说是前进了一位然后两个字符串才相等的。所以此时是dp[i][j]=dp[i][j-1]+1。

删除操作:在word1的第i−1​个字符后删除一个字符,使得删除后的字符串word[:i-1]与word2[:j]相同。这里要考虑清楚,删除操作对于原word2字符来说,j−1​是没有前进的,而对于word1来说是删除了一位然后两个字符串才相等的。所以此时是dp[i][j]=dp[i-1][j]+(0 or 1)。

代码如下:

class Solution:def minDistance(self, word1, word2):m=len(word1)+1; n=len(word2)+1dp = [[0 for i in range(n)] for j in range(m)]for i in range(n):dp[0][i]=ifor i in range(m):dp[i][0]=ifor i in range(1,m):for j in range(1,n):if word1[i-1] == word2[j-1]:dp[i][j] = dp[i-1][j-1]else:dp[i][j] = min(dp[i][j-1], dp[i-1][j], dp[i-1][j-1]) + 1return dp[m-1][n-1]word1 = "intention"
word2 = "execution"
test = Solution()
print(test.minDistance(word1, word2))

答案来源:https://blog.csdn.net/iyuanshuo/article/details/80112211

def minDistance(self, S1, S2):m = len(S1) + 1;n = len(S2) + 1dp = [[0 for i in range(n)] for j in range(m)]for i in range(n):dp[0][i] = ifor i in range(m):dp[i][0] = ifor i in range(1, m):for j in range(1, n):if S1[i - 1] == S2[j - 1]:dp[i][j] = dp[i - 1][j - 1]else:dp[i][j] = min(dp[i][j - 1], dp[i - 1][j], dp[i - 1][j - 1]) + 1return dp[m - 1][n - 1]

转载于:https://www.cnblogs.com/tsdblogs/p/9977577.html

leetcode第72题:编辑距离相关推荐

  1. leetcode:72. 编辑距离

    题目来源 leetcode 题目描述 class Solution {public:int minDistance(string word1, string word2) {} }; 题目解析 什么叫 ...

  2. [LeetCode]高频算法题

    建议在准备面试前的1-2周过一遍,这里尽量用简短的几个词,记录每道题的核心解法,帮助记忆 怎么用这个文档: 1)如果你还有1-2个月开始面试,那就跟着这个文档一道一道的写吧,看看里面说的解法是否符合你 ...

  3. Leetcode重点250题

    LeetCode重点250题 这个重点题目是把LeetCode前400题进行精简.精简方法如下: 删除不常考,面试低频出现题目 删除重复代码题目(例:链表反转206题,代码在234题出现过) 删除过于 ...

  4. 【Leetcode】 刷题之路1(python)

    leetcode 刷题之路1(python) 看到有大佬总结了一些相关题目,想着先刷一类. 1.两数之和 15.三数之和 16.最接近的三数之和 11.盛最多的水 18.四数之和 454.四数相加II ...

  5. 15.使用一样的BFS方法(代码几乎一模一样)解决多道LeetCode题目--542题(01矩阵)1765题(地图中的最高点)994腐烂的橘子

    一.综述 本文总结自己刷LeetCode中遇到的使用BFS方法解决相同类型的题目.(代码几乎是一模一样) 二.01矩阵(LeetCode第542题) class Solution {int[][] d ...

  6. leetcode每日刷题计划-简单篇day8

    leetcode每日刷题计划-简单篇day8 今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solutio ...

  7. 【leetcode】 算法题1 两数之和

    [leetcode] 算法题1 两数之和 问题   给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums ...

  8. leetcode第七题整数反转

    leetcode第七题: 提示:这里简述项目相关背景: 挑一题简单一点的试试手 问题描述: 原因分析: 提示:这里填写问题的分析: 通过了1031个案例应该是边界问题 解决方案: 提示:先改改待会来补 ...

  9. leetcode贪心算法题集锦(持续更新中)

    leetcode贪心算法题集锦 leetcode贪心算法题集锦(持续更新中).python 和C++编写. 文章目录 leetcode贪心算法题集锦 一.贪心算法 1.盛最多水的容器 2.买股票的最佳 ...

最新文章

  1. 《面向对象分析与设计》读书笔记——第一章 复杂性
  2. java开学第一周测试自我感想
  3. Hystrix断路器(五)
  4. selenium浏览器驱动下载地址整理
  5. 程序员过关斩将--数据库的乐观锁和悲观锁并非真实的锁
  6. Linux加密框架中的算法和算法模式
  7. access 报表中序号自动_数据报表多种序号生成方式
  8. ylbtech-Bill(发票管理)-数据库设计
  9. utilities(matlab)—— 多元函数的数值梯度
  10. [linux]tcpdump抓包
  11. 成人python培训_B2B优选:成人编程爱好者学习
  12. Android将毫秒转为时分秒
  13. aspupload ,在winows server 2008 下无法使用
  14. js去掉url中的域名
  15. 2021-06-22
  16. linux 定时任务 数量 性能,Linux 性能测试与分析
  17. Linux如何安装mysql数据库
  18. web渗透-Web服务通信原理
  19. 校园表白墙网站PHP源码
  20. FCFS进程调度算法

热门文章

  1. java基础69 JavaScript产生伪验证码(网页知识)
  2. Android 动态Tab分页效果
  3. ArcGIS Desktop开发基础(转)
  4. android开发相关资料整理【2011-10-29】
  5. 不要以自己的想法来推测别人的行为
  6. ffmpeg中av_strlcpy替换了pstrcpy
  7. Linux 下安装配置C/C++开发环境 Code::Blocks
  8. 深圳的中学计算机课学什么时候,2018-2019年深圳中小学校历出炉 中小学校什么时候几号开学...
  9. python简单网络爬虫_【Python】简单的网络爬虫
  10. 电脑边充电边用好吗_平板电脑充电推车厂家哪家好?