leetcode题解72-编辑距离
发布日期:2025-04-05 06:19:24 浏览次数:8 分类:精选文章

本文共 1353 字,大约阅读时间需要 4 分钟。

编辑距离是计算两个字符串变换所需的最小操作步骤的问题,包括插入、删除和替换操作。我们可以使用动态规划来解决这个问题,通过定义一个二维数组来记录状态。

定义状态:

dp[i][j] 表示将 word1 的前 i 个字符转换为 word2 的前 j 个字符所需的最少操作数。

初始化:

  • 如果 word1为空,只需要删除 j 个字符,dp[0][j] = j。
  • 如果 word2为空,只需要删除 i 个字符,dp[i][0] = i。

状态转移:

假设当前字符 word1[i-1] 和 word2[j-1] 相同,那么 dp[i][j] = dp[i-1][j-1]。如果字符不同,则需要考虑三种操作:

  • 插入:将 word1 的末尾插入与 word2[j-1] 相同的字符,操作数为 dp[i][j-1] + 1。
  • 删除:删除 word1 的末尾字符,操作数为 dp[i-1][j] + 1。
  • 替换:将 word1 的末尾字符替换为 word2[j-1],操作数为 dp[i-1][j-1] + 1。
  • 取这三种情况的最小值作为 dp[i][j]。

    通过对两个字符串进行全局遍历,逐个比较字符,最终得到 dp[m][n],即将 word1 转换为 word2 所需的最少操作数。


    具体实现如下:

    public int minDistance(String word1, String word2) {    int m = word1.length();    int n = word2.length();    int[][] dp = new int[m + 1][n + 1];        // 初始化边界    for (int i = 0; i <= m; i++) {        dp[i][0] = i;    }    for (int j = 0; j <= n; j++) {        dp[0][j] = j;    }        // 遍历每个字符    for (int i = 1; i <= m; i++) {        for (int j = 1; j <= n; j++) {            if (word1.charAt(i - 1) == word2.charAt(j - 1)) {                dp[i][j] = dp[i - 1][j - 1];            } else {                dp[i][j] = Math.min(                    dp[i - 1][j] + 1,   // 删除                    dp[i][j - 1] + 1,   // 插入                    dp[i - 1][j - 1] + 1 // 替换                );            }        }    }    return dp[m][n];}

    注意事项:

    • 解决这个问题可以使用空间优化,将二维数组转换为一维数组,只记录当前行和上一行,节省内存。
    • 字符比较时,可以直接字符匹配,确保兼容大小写。
    上一篇:leetcode题解75-颜色分类
    下一篇:leetcode题解70-爬楼梯

    发表评论

    最新留言

    网站不错 人气很旺了 加油
    [***.192.178.218]2025年04月26日 17时04分26秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章

    element ui 时间日期选择器 el-date-picker 报错 Prop being mutated “placement“ 2025-03-29
    element 如何使用自定义icon图标 2025-03-29
    element-plus的el-date-picker日期范围选择控件,根据开始日期限定结束日期的可选范围为开始日期到开始日期+30天 2025-03-29
    element-ui:el-input输入数字-整数和小数 2025-03-29
    ElementUI-el-progress改变进度条颜色跟文字样式 2025-03-29
    elTable火狐浏览器换行 2025-03-29
    15个Python数据处理技巧(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
    2024年全国程序员平均薪资排名:同样是程序员,为什么差这么多?零基础到精通,收藏这篇就够了 2025-03-29
    0基础成功转行网络安全工程师,年薪30W+,经验总结都在这(建议收藏) 2025-03-29
    10个程序员可以接私活的平台 2025-03-29
    10个运维拿来就用的 Shell 脚本,用了才知道有多爽,零基础入门到精通,收藏这一篇就够了 2025-03-29
    10款最佳免费WiFi黑客工具(附传送门)零基础入门到精通,收藏这一篇就够了 2025-03-29
    15个备受欢迎的嵌入式GUI库,从零基础到精通,收藏这篇就够了! 2025-03-29
    15个程序员常逛的宝藏网站!!从零基础到精通,收藏这篇就够了! 2025-03-29
    2023最新版Node.js下载安装及环境配置教程(非常详细)从零基础入门到精通,看完这一篇就够了 2025-03-29
    2024 年需要了解的顶级大数据工具(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
    2024 最新 Kali Linux 定制化魔改,完整版,添加常见60渗透工具,零基础入门到精通,收藏这篇就够了 2025-03-29
    2024大模型行业应用十大典范案例集(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
    2024年全球顶尖杀毒软件,从零基础到精通,收藏这篇就够了! 2025-03-29
    2024年度“金智奖”揭晓:绿盟科技获双项大奖,创新驱动网络安全新高度。从零基础到精通,收藏这篇就够了! 2025-03-29