Leetcode72. 编辑距离

题目传送地址:https://leetcode.cn/problems/edit-distance/

运行效率:
在这里插入图片描述
解题思路
二维数组,动态规划法。 以后凡是看到两个对象匹配的题,首先想到二维数组,动态规划的办法。
在这里插入图片描述

代码如下:

class Solution {
  public static int minDistance(String word1, String word2) {
        //处理边界条件
        if("".equals(word1)){
            return word2.length();
        }
           if("".equals(word2)){
            return word1.length();
        }
        //二维数组动态规划法
        int[][] dp = new int[word2.length()][word1.length()];
        char c1 = word1.charAt(0);
        char c2 = word2.charAt(0);
        //初始化第一行的数据
        for (int col = 0; col < word1.length(); col++) {
            String substring = word1.substring(0, col + 1);
            if (substring.indexOf(c2) != -1) {
                dp[0][col] = col;
            } else {
                dp[0][col] = col+1;
            }
        }
        //初始化第一列的数据
        for (int row = 0; row < word2.length(); row++) {
            String substring = word2.substring(0, row + 1);
            if (substring.indexOf(c1) != -1) {
                dp[row][0] = row;
            } else {
                dp[row][0] = row + 1;
            }
        }
        //然后再依次填充其他
        for (int row = 1; row < word2.length(); row++) {
            for (int col = 1; col < word1.length(); col++) {
                int leftObliqueVal = dp[row - 1][col - 1]; //左斜方的值
                char cc1 = word1.charAt(col);
                char cc2 = word2.charAt(row);
                if (cc1 == cc2) {
                    dp[row][col] = leftObliqueVal;
                } else {
                    int leftVal = dp[row][col-1]; //正左边的值
                    int topVal = dp[row - 1][col];//正上方的值
                    dp[row][col] = Math.min(Math.min(leftObliqueVal, leftVal), topVal) + 1;
                }
            }
        }
        return dp[word2.length() - 1][word1.length()-1];
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java全栈研发大联盟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值