题解 | #计算字符串的编辑距离#

计算字符串的编辑距离

https://www.nowcoder.com/practice/3959837097c7413a961a135d7104c314

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息

public class Main {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        // 注意 hasNext 和 hasNextLine 的区别

        while (in.hasNext()) { 

            String a = in.next();

            String b = in.next();

            System.out.println(getMinIns(a,b));

        }

    }

    private static int getMinIns(String s1,String s2){

        int[][] dp = new int[s1.length()+1][s2.length()+1];//定义一个二维数组存放历史数据

        for(int i=1;i<dp.length;i++){

            dp[i][0] = i;//当一个字符串长度为0时,另一份长度就是此时的最小距离了

        }

        //同理搞出递归的另一个

        for(int i=1;i<dp[0].length;i++){

            dp[0][i] = i;

        }

        //递归出口,明显s1和s2长度都为0时,距离为0

        dp[0][0] = 0;

        for(int i=1;i<dp.length;i++){

            for(int j=1;j<dp[i].length;j++){

                if(s1.charAt(i-1)==s2.charAt(j-1)){

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

                }else{

                    //替换和s1删除1个字符串,最小距离

                    int min1 = Math.min(dp[i-1][j-1]+1,dp[i-1][j]+1);

                    //替换和s2删除1个字符串,最小距离

                    int min2 = Math.min(dp[i-1][j-1]+1,dp[i][j-1]+1);

                    dp[i][j] = Math.min(min1,min2);

                }

            }  

        }

        return dp[s1.length()][s2.length()];       

    }

}

全部评论

相关推荐

10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
牛客154160166号:9月底还给我发短信,好奇怪,我24届的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务