leetcode困难72编辑距离

Posted qq_40707462

tags:

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


思路:动态规划
dp[i][j] 表示以下标 i-1 为结尾的字符串word1,和以下标 j-1 为结尾的字符串word2,最近编辑距离为dp[i][j]。

②初始化

int[][]dp=new int[l1+1][l2+1]

dp[i][0] :以下标i-1为结尾的字符串word1,和空字符串word2,最近编辑距离为dp[i][0]。即对word1里的元素全部做删除操作,即:dp[i][0] = i;

同理dp[0][j] = j;

③递推

if (word1[i - 1] == word2[j - 1])
    不操作
    【即dp[i][j] = dp[i - 1][j - 1]if (word1[i - 1] != word2[j - 1])
    增
    删
    换

【删】:word1删除一个元素,那么就是以下标i - 2为结尾的word1,与 j-1为结尾的word2,的最近编辑距离,再加上一个操作。
dp[i][j] = dp[i - 1][j] + 1;
【增】:word1增加一个元素,相当于word2删除一个元素,那么就是以下标i - 1为结尾的word1,与 j-2为结尾的word2,的最近编辑距离,再加上一个操作。
dp[i][j] = dp[i][j - 1] + 1;
【换】:word1替换word1[i - 1],使其与word2[j - 1]相同,那么以下标i-2为结尾的word1, 与 j-2为结尾的word2,的最近编辑距离,加上一个操作。

dp[i][j] = dp[i - 1][j - 1] + 1;

class Solution {
    public int minDistance(String word1, String word2) {
        int l1=word1.length(),l2=word2.length();
        int[][]dp=new int[l1+1][l2+1];
        for(int i=0;i<=l1;i++){
            for(int j=0;j<=l2;j++){
                if(i==0) {dp[0][j]=j;continue;}
                if(j==0) {dp[i][0]=i;continue;}

                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][j-1]),dp[i-1][j-1])+1;
                }
            }
        }
        return dp[l1][l2];
    }
}

以上是关于leetcode困难72编辑距离的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-编辑距离(动态规划)-72

72. 编辑距离困难线性DP

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

LeetCode 72 编辑距离

编辑距离---动态规划00001

Leetcode 72.编辑距离