来源:力扣 (LeetCode)
链接:https://leetcode-cn.com/problems/edit-distance
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
一、题目描述
给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
- 插入一个字符
- 删除一个字符
- 替换一个字符
示例 1:
- 输入:word1 = "horse", word2 = "ros"
- 输出:3
- 解释:
|
1 2 3 |
horse -> rorse ( 将 'h' 替换为 'r') rorse -> rose ( 删除 'r') rose -> ros ( 删除 'e') |
示例 2:
- 输入:word1 = "intention", word2 = "execution"
- 输出:5
- 解释:
|
1 2 3 4 5 |
intention -> inention ( 删除 't') inention -> enention ( 将 'i' 替换为 'e') enention -> exention ( 将 'n' 替换为 'x') exention -> exection ( 将 'n' 替换为 'c') exection -> execution ( 插入 'u') |
![【每日打卡】[leetcode]72-编辑距离-图片1](https://www.dyxmq.cn/wp-content/uploads/2020/04/88c60-imageff84a6c5047db6ed.png)
二、题目解析
这道题目和 leetcode44-通配符匹配很类似,比较两个字符串之间的状态,因此也可以使用相同的办法。以 dp[i][j]表示 word1 的第 i 个字符到 word2 的第 j 字符转换需要的最小操作数,动态转移方程可以表示为:
![]()
说明:如果 word1[i] 和 word2[j] 相等,那么最小操作次数就等于 dp[i-1][j-1]。如果不相等,那么操作次数就应该是两个字符串的前一个字符匹配结果中的最小值加一。
三、代码
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
static inline int min(int x, int y) { return x < y ? x : y; } class Solution { public: int minDistance(string word1, string word2) { int i, j, row, col; vector<vector<int>> dp; if (word1.empty() || word2.empty()) return word1.size() + word2.size(); row = word1.size(); col = word2.size(); dp.reserve(row + 1); for (i = 0; i <= row; i++) { dp.emplace_back(); vector<int> &v = dp[i]; dp[i].reserve(col + 1); for (j = 0; j <= col; j++) { if (j == 0) { dp[i].push_back(i); } else if (i == 0) { dp[i].push_back(j); } else { dp[i].push_back(0); } } } for (i = 1; i <= word1.size(); i++) { for (j = 1; j <= word2.size(); j++) { if (word1[i - 1] == word2[j - 1]) { dp[i][j] = dp[i - 1][j - 1]; } else { dp[i][j] = min(min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1; } } } return dp[row][col]; } }; |
![[leetcode]887-鸡蛋掉落](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/02/b0c9f-imageba57ef224a3508f7.md.png&w=280&h=210&a=&zc=1)
![[leetcode]121-买卖股票的最佳时机](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/02/678ca-image95fa89dcac4f8a74.png&w=280&h=210&a=&zc=1)
![[leetcode]276-栅栏涂色](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/02/532ce-image57287b3fd0fa77e2.md.png&w=280&h=210&a=&zc=1)
![[leetcode]322-零钱兑换](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/02/b1fe2-image3ad85743774fdff4.png&w=280&h=210&a=&zc=1)

![[leetcode]199-二叉树的右视图](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/04/f24a8-image.png&w=280&h=210&a=&zc=1)
![【每日打卡】[leetcode]460-LFU缓存](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/04/5b3f2-image.png&w=280&h=210&a=&zc=1)
![[leetcode]125-验证回文串](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/03/5bfa5-image.png&w=280&h=210&a=&zc=1)
![【每日打卡】[程序员面试宝典]17.16-按摩师](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/03/9ecc9-image.png&w=280&h=210&a=&zc=1)
![【每日打卡】[leetcode]876-链表的中间节点](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/03/64d0d-imagece778ab033c9d90d.png&w=280&h=210&a=&zc=1)
![【每日打卡】[剑指offer]面试题40-最小的k个数](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/03/c83c9-imagec745c425c670e18c.png&w=280&h=210&a=&zc=1)
![【每日打卡】[leetcode]-409最长回文子串](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/03/e5589-image788d511d7c1e839c.png&w=280&h=210&a=&zc=1)
![【每日打卡】[leetcode]面试题1.6-字符串压缩](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/03/776bc-image.png&w=280&h=210&a=&zc=1)
![【每日打卡】[leetcode]695-岛屿的最大面积](https://www.dyxmq.cn/wp-content/themes/begin/prune.php?src=https://www.dyxmq.cn/wp-content/uploads/2020/03/aa889-image036941cd6bbf2296.png&w=280&h=210&a=&zc=1)
评论