题目地址(72. 编辑距离)

Posted 潜行前行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题目地址(72. 编辑距离)相关的知识,希望对你有一定的参考价值。

题目地址(72. 编辑距离)

https://leetcode-cn.com/problems/edit-distance/

题目描述

给你两个单词 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')


提示:

0 <= word1.length, word2.length <= 500
word1 和 word2 由小写英文字母组成

关键点

  • 依赖前缀的状态 dp[i-1][j-1]:替换 dp[i-1][j]: 插入 dp[i][j-1]: 删除

代码

  • 语言支持:Java

Java Code:


class Solution 
    public int minDistance(String word1, String word2) 
        int len1 = word1.length();
        int len2 = word2.length();
        int dp[][] = new int[len1+1][len2+1]; // dp[i][j] word1前i个字符 转化为 word2前j 个字符需要的最小值。需要把空字符串考虑到,长度要加+1
        for(int i=1;i<len1+1;i++) dp[i][0] = dp[i-1][0] + 1;
        for(int i=1;i<len2+1;i++) dp[0][i] = dp[0][i-1] + 1;
        for(int i=1;i<len1+1;i++)
            for(int j=1;j < len2+1;j++)
                if(word1.charAt(i-1) == word2.charAt(j-1))
                    dp[i][j] = dp[i-1][j-1];
                else
                    dp[i][j] = Math.min(Math.min(dp[i-1][j],dp[i-1][j-1]),dp[i][j-1]) +1; // dp[i-1][j-1] 替换 dp[i-1][j] 插入 dp[i][j-1] 删除
                
            
        
        return dp[len1][len2];
    


以上是关于题目地址(72. 编辑距离)的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 72.编辑距离

LeetCode-72. 编辑距离

72编辑距离

最短编辑距离 72.EditDistance.md

[Leetcode 72]编辑距离 Edit Distance

LeetCode 72. 编辑距离 c++/java详细题解