当前位置: 首页 > article >正文

Leetcode面试经典150题-72.编辑距离

解法都在代码里,不懂就留言或者私信

动态规划最经典题之一,如果写不出来,动态规划好好再学学

class Solution {
    /**这个题是动态规划最经典的题,另一个最经典的是背包问题 */
    public int minDistance(String word1, String word2) {
        /**如果一个为0,取另外一个的长度就可以了 */
        if(word1.length() == 0 || word2.length() == 0) {
            return word1.length() == 0? word2.length() : word1.length();
        }
        /**转成字符数组方便操作*/
        char[] wordArr1 = word1.toCharArray();
        char[] wordArr2 = word2.toCharArray();
        /**dp[i][j]表示word1的前i个字符转换成word2的前j个字符的最少操作数,这里注意数组的长度 */
        int[][] dp = new int[wordArr1.length + 1][wordArr2.length + 1];
        /**初始化第一行,也就是dp[0][j],就是word1的前0个字符编辑成word2的前j个字符的代价,当然j是多少就需要多少次操作(添加) */
        for(int j = 0; j < dp[0].length; j++) {
            dp[0][j] = j;
        }
        /**初始化第一列,也就是dp[i][0],就是word1的前i个字符编辑成word2的前0个字符的代码,有多少删除多少呗,还能咋样*/
        for(int i = 0; i < dp.length; i++) {
            dp[i][0] = i;
        }
        /**初始化一般位置,对于一般位置,有两种操作路径:
        1.使用word1的前i-1个字符编辑成word2的前j个字符,然后删除word1的i位置字符
        2.使用word1的前i个字符编辑成word2的前j-1个字符,然后加上word2的j位置字符
        3.word1的前i-1编辑成word2的前j-1,然后i位置的字符替换为j位置的字符(如果相同代价为0)
        两个谁代价小要谁 */
        for(int i = 1; i < dp.length; i++) {
            for(int j = 1; j < dp[i].length; j++) {
                /**这里我把1,2他们写一起了,以为本题什么操作代价都相同,所以1我写在最后了,如果你觉得不舒服可以改成min函数里各加1各1 */
                dp[i][j] = Math.min(dp[i-1][j], dp[i][j-1]) + 1;
                /**把情况3和1,2的结果比以下 */
                dp[i][j] = Math.min(dp[i][j], dp[i-1][j-1] + (wordArr1[i-1] == wordArr2[j-1]? 0 : 1));
            }
        }
        /**返回word1的整个长度编辑成word2的整个长度的代价 */
        return dp[wordArr1.length][wordArr2.length];
    }
}

勉勉强强的结果


http://www.kler.cn/a/280291.html

相关文章:

  • 基于Swagger自动生成离线API文档(Word、Markdown文档)
  • 【面试】jvm静态变量和局部变量对比
  • 回车键实现登录
  • Openai API + langchain 分析小型pdf文档
  • Tomcat的配置文件中有哪些关键的配置项,它们分别有什么作用?
  • 【搜索引擎】ElasticSearch 7.x版本
  • 电单车TCP通讯协议对接phpworkermanHikversion充电桩上位机通讯协议
  • 【开源分享】在线客服系统PHP源码 带搭建教程
  • 【测试】JMeter从入门到进阶
  • 关于Avalonia程序在Linux上运行画面不显示的问题详解
  • 阅读笔记5:董超底层视觉之美|时空的交错与融合——论视频超分辨率
  • 2024年新算法-基于SBOA-BP混合神经网络的数据预测(Python代码实现)
  • 本地生活服务商系统如何利用本地推获得更多曝光?
  • 排序补充之快排的三路划分法
  • Shell 脚本开发学习
  • SQL函数
  • 5.diff算法和虚拟dom
  • Java接口中的长连接与短连接详解:概念、应用场景及实现
  • RDMA驱动学习(一)- 用户态到内核态的过程
  • 【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(十五)