首页 > 其他分享 >Leetcode面试经典150题-72.编辑距离

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

时间:2024-08-25 10:24:57浏览次数:9  
标签:150 个字符 int length word1 72 word2 Leetcode dp

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

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

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];
    }
}

勉勉强强的结果

标签:150,个字符,int,length,word1,72,word2,Leetcode,dp
From: https://blog.csdn.net/Chang_Yafei/article/details/141526019

相关文章

  • Qwen2-72B的vLLM部署
    今天尝试本地部署了Qwen2-72B-Instruct-GPTQ-Int4模型,这里记录一下操作的过程。参考:https://qwen.readthedocs.io/zh-cn/latest/deployment/vllm.htmlhttps://docs.vllm.ai/en/stable/serving/openai_compatible_server.htmlhttps://techdiylife.github.io/blog/blog.html?......
  • 线性dp:LeetCode674. 最长连续递增序列
    LeetCode674.最长连续递增序列阅读本文之前,需要先了解“动态规划方法论”,这在我的文章以前有讲过链接:动态规划方法论本文之前也讲过一篇文章:最长递增子序列,这道题,阅读本文的同时可以与“最长递增子序列进行对比”,这样更能对比二者的区别!LeetCode300.最长递增子序列-To......
  • 150页的极简大模型入门蛇尾书,学大模型太简单了
    如果问个问题:有哪些产品曾经创造了伟大的奇迹?ChatGPT应该会当之无愧入选。仅仅发布5天,ChatGPT就吸引了100万用户——当然,数据不是关键,关键是其背后的技术开启了新的AI狂潮,成为技术变革的点火器。就算我们这些周边吃瓜群众都日日活在ChatGPT带来的震撼里,更不用说在......
  • [LeetCode笔记]942. 增减字符串匹配
    /*942.增减字符串匹配由范围[0,n]内所有整数组成的n+1个整数的排列序列可以表示为长度为n的字符串s,其中:如果perm[i]<perm[i+1],那么s[i]=='I'如果perm[i]>perm[i+1],那么s[i]=='D'给定一个字符串s,重构排列perm并返回它。如果有多个有效排......
  • [LeetCode]999. 可以被一步捕获的棋子数
    可以被一步捕获的棋子数简单给定一个8x8的棋盘,只有一个白色的车,用字符'R'表示。棋盘上还可能存在白色的象'B'以及黑色的卒'p'。空方块用字符'.'表示。车可以按水平或竖直方向(上,下,左,右)移动任意个方格直到它遇到另一个棋子或棋盘的边界。如果它能够在一次移动中移......
  • LeetCode之链表类题目
    链表类题目之CPP版......
  • LeetCode-Python-1650. 二叉树的最近公共祖先 III
    给定一棵二叉树中的两个节点 p 和 q,返回它们的最近公共祖先节点(LCA)。每个节点都包含其父节点的引用(指针)。Node 的定义如下:classNode{publicintval;publicNodeleft;publicNoderight;publicNodeparent;}根据维基百科中对最近公共祖先节点......
  • 【LeetCode面试150】——36有效的数独
    博客昵称:沈小农学编程作者简介:一名在读硕士,定期更新相关算法面试题,欢迎关注小弟!PS:哈喽!各位CSDN的uu们,我是你的小弟沈小农,希望我的文章能帮助到你。欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!......
  • 【LeetCode面试150】——3无重复数组的最长子串
    博客昵称:沈小农学编程作者简介:一名在读硕士,定期更新相关算法面试题,欢迎关注小弟!PS:哈喽!各位CSDN的uu们,我是你的小弟沈小农,希望我的文章能帮助到你。欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!......
  • LeetCode84(柱状图中最大的矩形)理解单调栈
    1.LeetCode84(柱状图中最大的矩形)给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为1。求在该柱状图中,能够勾勒出来的矩形的最大面积。示例1:输入:heights=[2,1,5,6,2,3]输出:10解释:最大的矩形为图中红色区域,面积为10示例2:输入......