Leetcode 72. Edit Distance (python+cpp)

本文详细解析了LeetCode第72题——编辑距离问题,通过动态规划方法解决。介绍了三种基本操作:插入、删除和替换,并分析了它们如何影响动态规划子问题。给出了Python和C++的实现代码。
摘要由CSDN通过智能技术生成

Leetcode 72. Edit Distance

题目

在这里插入图片描述

解析:

这道题目是著名的Levenshtein distance问题,解法当然是动态规划。本题的关键主要是找出三种操作1.insert 2.delete 3. replace这三种操作与动态规划sub problem之间的关系。首先定义一个二维dp数组,dp[i][j]代表将word1[0:i]编辑成word2[0:j]所需要的最短距离。接下来具体分析三种操作与sub problem之间的对应。

  • insert操作,insert意味着在word1[0:i]后面加一个字符,这意味着,他不影响word1[0:i],但是这部操作解决了word2第j个字符的distance,所以说现在的sub problem依旧是word1[0:i]到word2[0:j-1]换言之dp[i][j-1]
  • replace操作,同样的分析replace操作对应的subproblem应该是dp[i-1][j-1]
  • delete操作对应的是dp[i-1][j]
  • 而对于某种状态应该分为两种情况,如果当前的word中的当前字符相同,意味着这个位置不需要任何操作。如果不同,那应该采取上面上述操作中最小的一种
    综上所述,最后的状态转移方程应该如下:
if word1[i-1]==word2[j-1]:
	dp[i][j] = dp[i-1][j-1] // 无需任何操作
else:
	dp[i][j] = min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1])) + 1 // 去三种操作中对应sub problem最小的一个

更详细的解析推荐看这个youtube视频,确实讲的非常好
https://www.youtube.com/watch?v=MiqoA-yF-0M

python代码如下:


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值