72. 编辑距离
给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
插入一个字符
删除一个字符
替换一个字符
题解:
1.两个单词
2.可以通过插入、删除、替换一个字符
3.转换成另一个单词
4.转换需要的最少操作次数
示例 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')
解题思路:动态规划
用一张二维数组来储存所有可能的操作的次数,过程中把第二个单词与第一个单词逐字符相等判断:
-
字符相等,直接记录当前操作次数
-
字符不相等,或插入或删除或替换,操作次数都要加1
动态规划过程体现在每次字符不相等时,选取当前操作次数最少的次数加1,这样就能最终在数组中找到一条最少操作次数的路径,路径终点值就是操作的最少次数。(示例一为例)
二维矩阵中红线走过的路径即动态规划过程中,可能操作次数中最优路径,路径迭代终点值为最优值。
C/C++题解:(点击蓝字阅读源码,或前往公众号回复“72”获取)
class Solution {
public:
int minDistance(string word1, string word2) {
Java题解:(点击蓝字阅读源码,或前往公众号回复“72”获取)
class Solution {
public int minDistance(String word1, String word2) {
Python题解:(点击蓝字阅读源码,或前往公众号回复“72”获取)
class Solution(object):
def minDistance(self, word1, word2):
""":type word1: str:type word2: str:rtype: int"""
更多题解可前往公众号免费获取