题解 | #编辑距离(一)#

编辑距离(一)

https://www.nowcoder.com/practice/6a1483b5be1547b1acd7940f867be0da

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str1 string字符串 
     * @param str2 string字符串 
     * @return int整型
     */
     /**
        思路 使用二维dp[i][j] 表示str1[i]到str2[j] 要编辑多少步

        然后循环遍历 
        如果str1[i] == str2[j] 表示该步骤不需要编辑dp[i-1][j-1] == dp[i][j] 
        如果str1[i] != str2[j]

        (都化为删除操作)
        1.str1做删除操作或str2做添加操作  
            dp[i][j] = dp[i-1][j] + 1
        2.str1做添加操作或str2做删除操作
            dp[i][j] = dp[i][j-1] + 1
        3.str1做修改操作 或 str2做修改操作 是先删除后添加 或者先添加后删除
            dp[i][j] = dp[i-1][j-1] +1

      */
    public int editDistance (String str1, String str2) {
        // write code here
        int n = str1.length();
        int m = str2.length();

        int dp[][] = new int[n+1][m+1]; //多开一个的原因 其中一个字符串为空串时

        //初始化二维dp  
        //当 str2 为空串时
        for(int i  =  0 ; i <= n ; i++){
            dp[i][0] = i;
        }
        //当 str1 为空串时
        for(int i  =  0 ; i <= m ; i++){
            dp[0][i] = i;
        }

   
        
        for(int i  =  1 ; i <= n ; i++){
            for(int j = 1 ; j <= m ; j++){
                if(str1.charAt(i-1) == str2.charAt(j-1)){
                    dp[i][j] = dp[i - 1][ j - 1];
                }else{
                    //求最少操作数
                    dp[i][j] = Math.min(dp[i-1][j],Math.min(dp[i][j-1],dp[i-1][j-1])) + 1;
                }
            }
        }

        return dp[n][m];
    }
}

全部评论
知识累计中,感谢大佬分享
点赞 回复 分享
发布于 2023-06-01 09:18 山东
楼主题写的的很清楚了
点赞 回复 分享
发布于 2023-06-01 09:03 湖北

相关推荐

04-14 20:10
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务