动态规划题解 | #计算字符串的编辑距离#

计算字符串的编辑距离

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

一开始都想到动态规划,但是想的是一维,看了别人的想法才恍然大悟

dp[i][j]代表 l1 的前 i 个字符 与 l2 的前 j 个字符的最小编辑距离

字符串的编辑距离无关方向

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String l1 = in.nextLine();
        String l2 = in.nextLine();

        boolean isL1Min = l1.length() <= l2.length();
        int minLength = isL1Min?l1.length():l2.length();

        int[][] dp = new int[l1.length()+1][l2.length()+1];
	    //初始化边界值,0个字符和任意i字符的编辑距离都是i。
        for(int i=1;i<=l2.length();i++) dp[0][i] = i;
        for(int i=1;i<=l1.length();i++) dp[i][0] = i;
	  
		//字符相同直接继承,不相同便是三种情况,(增(删)字符串1,增(删)字符串2,直接替换)
        for(int i=1;i<=l1.length();i++){
            for(int j=1;j<=l2.length();j++)
                if(l1.charAt(i-1)==l2.charAt(j-1)) dp[i][j] = dp[i-1][j-1];
                else dp[i][j] = Math.min(Math.min(dp[i-1][j]+1,dp[i][j-1]+1),dp[i-1][j-1]+1);
        }
        System.out.print(dp[l1.length()][l2.length()]);
    }
}

全部评论

相关推荐

totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务