day112(3.14)——leetcode面试经典150

72. 编辑距离

72. 编辑距离

题目:

题解:

java 复制代码
class Solution {
    public int minDistance(String word1, String word2) {
        char[] w1 = word1.toCharArray();
        char[] w2 = word2.toCharArray();
        int[][] dp = new int[w1.length+1][w2.length+1];
        //进行设置初始:当i==0时,这说明word1此时没字符,那么只能通过插入字符来实现单词word2
        //当j==0时,这说明此时word2没有字符,那么只能通过删除word1来实现word2
        //具体要插入替换的次数是根据字符串长度进行增加的
        for(int i=0;i<=w1.length;i++) {
            dp[i][0]=i;
        }
        for(int i=0;i<=w2.length;i++) {
            dp[0][i]=i;
        }
        //进行递堆
        //状态转移方程是:如果当前i和j的字符相等,此时需要的最小步数就是dp[i-1][j-1]
        //如果当前i和j的字符不相等,也意味着,可以通过插入,删除,替换三种方式来使他们相等,只需要找到当前最小的步骤的方式,再加上1
        //这就意味着此时(i-1,j)->(i,j)的操作是删除
        //(i,j-1)-> (i,j)的操作是插入
        //(i-1,j-1)-> (i,j)的操作是替换
        //理清楚了这里就可以直接写代码
        for(int i=1;i<=w1.length;i++) {
            for(int j=1;j<=w2.length;j++) {
                if(w1[i-1]==w2[j-1]) {
                    dp[i][j]=dp[i-1][j-1];
                }
                else {
                    dp[i][j]=Math.min(Math.min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
                }
            }
        }
        return dp[w1.length][w2.length];
    }
}
相关推荐
折哥的程序人生 · 物流技术专研7 小时前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
程序员二叉8 小时前
【Java】 异常高频面试题精讲 | 易错点+对比总结
java·开发语言·面试
想吃火锅10058 小时前
【leetcode】14.最长公共前缀js
算法·leetcode·职场和发展
我爱cope11 小时前
【Agent智能体26 | 多智能体-多智能体工作流】
人工智能·设计模式·语言模型·职场和发展
菜鸟‍11 小时前
LeetCode 1 27 和 704 || 两数之和 移除元素 二分查找
算法·leetcode·职场和发展
weixin_5231853211 小时前
Java面试高频题:Integer缓存机制与 equals、== 区别
java·缓存·面试
胡志辉15 小时前
深入浅出理解浏览器事件循环:从一道输出题讲到 Chrome 源码
前端·javascript·面试
sjsjs1116 小时前
力扣3558. 给边赋权值的方案数 I
算法·leetcode·职场和发展
嵌入式ZYXC17 小时前
第8篇:《面试题:模拟地和数字地为什么要分开?怎么接?》
stm32·单片机·嵌入式硬件·面试·职场和发展
plainGeekDev17 小时前
算法刷题笔记:一维DP没那么难,状态想清楚就赢了一半
java·算法·面试