LeetCode(72):编辑距离
Hard!
题目描述:
给定两个单词 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')
解题思路:
这道题让求从一个字符串转变到另一个字符串需要的变换步骤,共有三种变换方式,插入一个字符,删除一个字符,和替换一个字符。根据以往的经验,对于字符串相关的题目十有八九都是用动态规划Dynamic Programming来解,这道题也不例外。
这道题我们需要维护一个二维的数组dp,其中dp[i][j]表示从word1的前i个字符转换到word2的前j个字符所需要的步骤。那我们可以先给这个二维数组dp的第一行第一列赋值,这个很简单,因为第一行和第一列对应的总有一个字符串是空串,于是转换步骤完全是另一个字符串的长度。跟以往的DP题目类似,难点还是在于找出递推式,我们可以举个例子来看,比如word1是“bbc",word2是”abcd“,那么我们可以得到dp数组如下:
Ø a b c d Ø 0 1 2 3 4 b 1 1 1 2 3 b 2 2 1 2 3 c 3 3 2 1 2
通过观察可以发现,当word1[i] == word2[j]时,dp[i][j] = dp[i - 1][j - 1],其他情况时,dp[i][j]是其左,左上,上的三个值中的最小值加1,那么可以得到递推式为:
dp[i][j] = / dp[i - 1][j - 1] if word1[i - 1] == word2[j - 1]
\ min(dp[i - 1][j - 1], min(dp[i - 1][j], dp[i][j - 1])) + 1 else
C++解法一:
1 class Solution { 2 public: 3 int minDistance(string word1, string word2) { 4 int n1 = word1.size(), n2 = word2.size(); 5 int dp[n1 + 1][n2 + 1]; 6 for (int i = 0; i <= n1; ++i) dp[i][0] = i; 7 for (int i = 0; i <= n2; ++i) dp[0][i] = i; 8 for (int i = 1; i <= n1; ++i) { 9 for (int j = 1; j <= n2; ++j) { 10 if (word1[i - 1] == word2[j - 1]) { 11 dp[i][j] = dp[i - 1][j - 1]; 12 } else { 13 dp[i][j] = min(dp[i - 1][j - 1], min(dp[i - 1][j], dp[i][j - 1])) + 1; 14 } 15 } 16 } 17 return dp[n1][n2]; 18 } 19 };
转载于:https://www.cnblogs.com/ariel-dreamland/p/9154152.html
LeetCode(72):编辑距离相关推荐
- [leetcode] 72. 编辑距离(二维动态规划)
72. 编辑距离 再次验证leetcode的评判机有问题啊!同样的代码,第一次提交超时,第二次提交就通过了! 此题用动态规划解决. 这题一开始还真难到我了,琢磨半天没有思路.于是乎去了网上喵了下题解看 ...
- Java实现 LeetCode 72 编辑距离
72. 编辑距离 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字 ...
- LeetCode 72. 编辑距离(DP)
1. 题目 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示 ...
- 2022-3-22 Leetcode 72.编辑距离
class Solution {public:int minDistance(string word1, string word2) {int n = word1.length();int m = w ...
- 123. Leetcode 72. 编辑距离 (动态规划- 字符串系列)
步骤一.确定状态: 确定dp数组及下标含义 dp[i][j]表示word1[:i]的单词与word2[:j]单词之间的最小编辑距离 步骤二.推断状态方程: 在确定递推公式的时候,首先要考虑清楚编辑的几 ...
- LeetCode 72.编辑距离(动态规划)
编辑距离 针对两个字符串(如英文字母)的差异程度的量化测量,量测方式是看至少需要多少次的处理才能将一个字符串变成另一个字符串. 编辑距离应用 一.可应用于NLP,如拼写检查可以根据一个拼错的字和其他正 ...
- leetcode 72. 编辑距离
/***** 定义状态: DP[i][j]其中i表示word1前i个字符,j表示Word2前i个字符 DP[i][j]表示单词1前i个字符匹配单词2前j个字符,最少变换次数: 状态转移: for i: ...
- [leetcode] 72.编辑距离
给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: ...
- LeetCode 72 编辑距离
思路:动态规划 class Solution { public:int minDistance(string word1, string word2) { int dp[501][501]; for( ...
- ⭐算法入门⭐《动态规划 - 串匹配》困难02 —— LeetCode 72. 编辑距离
最新文章
- 解决Raspberry Pi不识别RTL8188eu无线网卡芯片的问题
- ajax java 插件_对JQuery中Ajax应用与jQuery插件的理解与笔记
- 为何你叫妹子笑,却拍出无数黑照?
- 进程丶线程丶CPU关系简述
- 华为AR engine 应用开发学习教程
- feather 设置坐标刻度_Matlab中将坐标轴放在原点位置
- JS获取页面中Url的某个参数
- Java 并发编程CAS、volatile、synchronized原理详解
- b+tree索引在MyIsam和InnoDB的不同实现方式
- HarmonyOS 开发App详细步骤
- VS2015 LINK : warning LNK4068: 未指定 /MACHINE;默认设置为 X86
- Processes and Threads 线程和进程的理解
- visio自己画的图怎么填充_Visio怎么画直线并填充颜色?
- 中介管理系统php源代码,PHP房产中介管理系统小程序源码8.0.5 后台+前端
- Axure RP 8管理团队项目中遇到的问题
- html js手册chm,W3C Javascript CHM参考手册离线版
- Java小峰宿舍管理系统_基于JAVA的宿舍管理系统
- 进销存系统设计说明书
- Thoughtworks笔试
- TM1622的程序设计实现