LeetCode72编辑距离

题目描述

解析

一般这种给出两个字符串的动态规划问题都是维护一个二维数组,尺寸和这两个字符串的长度相等,用二维做完了后可以尝试优化空间。这一题其实挺类似1143这题的,只不过相比1143的一种方式,变成了三种方式,就要找三个值,在其中取最小的那一个。

复制代码
public static int minDistance(String word1, String word2) {
        char[] w1 = word1.toCharArray();
        char[] w2 = word2.toCharArray();
        int len1 = word1.length();
        int len2 = word2.length();

        int[][] dp = new int[len1 + 1][len2 + 1];

        // 初始化第一行和第一列
        for (int i = 0; i <= len1; i++) {
            dp[i][0] = i;
        }
        for (int j = 0; j <= len2; j++) {
            dp[0][j] = j;
        }

        // 填充dp数组
        for (int i = 1; i <= len1; i++) {
            for (int j = 1; j <= len2; j++) {
                int cost = (w1[i - 1] == w2[j - 1]) ? 0 : 1;
                dp[i][j] = Math.min(dp[i - 1][j] + 1, // 删除
                        Math.min(dp[i][j - 1] + 1, // 插入
                                dp[i - 1][j - 1] + cost)); // 替换
            }
        }

        return dp[len1][len2];
    }
相关推荐
vim怎么退出4 分钟前
46.二叉树展开为链表
前端·leetcode
C语言魔术师17 分钟前
62.不同路径
算法·leetcode·动态规划
fantasy_417 分钟前
LeetCode238☞除自身以外数组的乘积
java·数据结构·python·算法·leetcode
GalenZhang88819 分钟前
Java生成微信小程序码及小程序短链接
java·微信小程序·小程序
椰羊~王小美22 分钟前
贪心算法和动态规划
算法·贪心算法·动态规划
元亓亓亓22 分钟前
Java后端开发day38--不可变集合&Stream流
java·开发语言
圣保罗的大教堂24 分钟前
leetcode 2302. 统计得分小于 K 的子数组数目 困难
leetcode
纪元A梦30 分钟前
华为OD机试真题——阿里巴巴找黄金宝箱Ⅰ(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
java·c语言·javascript·c++·python·华为od·go
CHQIUU1 小时前
跨语言哈希一致性:C# 与 Java 的 MD5 之战?
java·c#·哈希算法
愚润求学1 小时前
【专题四】前缀和(3)
开发语言·c++·笔记·leetcode·刷题·c++11