​LeetCode刷题实战72:编辑距离

LeetCode 第72题:编辑距离 编辑距离问题是一类经典的动态规划问题,它通过最小化字符串之间的编辑操作数来衡量两个字符串的相似度。我们讨论了三种解决方法:基础动态规划、递归+记忆化搜索以及空间优化的动态规划。这些方法各有优缺点,在不同的应用场景中都能发挥重要作用。通过这些例子和详细的解析,希望大家能够对编辑距离问题有更深入的理解。在实际的开发中,动态规划不仅仅适用于字符串问题,还能解决许多其他复杂问题。就像人生中的各种挑战一样,我们总能找到最优的解决方案。 阅读详情

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 编辑距离,我们先来看题面:

https://leetcode-cn.com/problems/edit-distance

Given two words word1 and word2, find the minimum number of operations required to convert word1 to word2.

You have the following 3 operations permitted on a word:

Insert a character

Delete a character

Replace a character

题意

给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。

你可以对一个单词进行如下三种操作:

  1. 插入一个字符

  2. 删除一个字符

  3. 替换一个字符

样例

示例 1:

输入:word1 = "horse", word2 = "ros"
输出:3
解释:
horse -> rorse (将 'h' 替换为 'r')
rorse -> rose (删除 'r')
rose -> ros (删除 'e')

示例 2:

输入:word1 = "intention", word2 = "execution"
输出:5
解释:
intention -> inention (删除 't')
inention -> enention (将 'i' 替换为 'e')
enention -> exention (将 'n' 替换为 'x')
exention -> exection (将 'n' 替换为 'c')
exection -> execution (插入 'u')

解题

https://blog.youkuaiyun.com/Koala_Tree/article/details/80074722

动态规划

  • 使用dp[i][j]用来表示字符串1的0~i-1、字符串2的0~j-1的最小编辑距离;

  • 我们可以知道边界情况:

    dp[i][0] = i、dp[0][j]=j;

  • 同时对于两个字符串的子串,都能分为最后一个字符相等或者不等的情况:

  • 如果words[i-1] == words[j-1]:

    dp[i][j] = dp[i-1][j-1];

    也就是说当前的编辑距离和位置i和j的字符无关;

  • 如果words[i-1] != words[j-1]:则存在三种可能的操作:

  1. 向word1插入:

    dp[i][j] = dp[i][j-1] + 1;

  2. 从word1删除:

    dp[i][j] = dp[i-1][j] + 1;

  3. 替换word1元素:

    dp[i][j] = dp[i-1][j-1] + 1;

class Solution {
public:
    int minDistance(string word1, string word2) {
        int rows = word1.length();
        int cols = word2.length();
        vector<vector<int> > dp(rows+1, vector<int>(cols+1, 0));

        for(int i=1; i<=rows; ++i)
            dp[i][0] = i;
        for(int j=1; j<=cols; ++j)
            dp[0][j] = j;

        for(int i=1; i<=rows; ++i){
            for(int j=1; j<=cols; ++j){
                if(word1[i-1] == word2[j-1])
                    dp[i][j] = dp[i-1][j-1];
                else
                    dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1])) + 1;
            }
        }

        return dp[rows][cols];
    }
};

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力。

上期推文:

LeetCode40-60题汇总,速度收藏!

LeetCode刷题实战61:旋转链表

LeetCode刷题实战62:不同路径

LeetCode刷题实战63:不同路径 II

LeetCode刷题实战64:最小路径和

LeetCode刷题实战66:加一

LeetCode刷题实战67:二进制求和

LeetCode刷题实战68:文本左右对齐

LeetCode刷题实战69:x 的平方根

LeetCode刷题实战70:爬楼梯

LeetCode刷题实战71:简化路径

某银行大数据分析平台之云原生架构 软考架构师论文 阅读详情

相关推荐

win x64下安装oracle 12c出现[INS-30131]报错的解决方案

问题:  win x64下安装oracle 12c出现[INS-30131]报错的解决方案 安装oracle11g碰到“无法访问临时位置”的问题,详细信息如下: INS-30131] 执行安装程序验证所需的初始设置失败。 原因 - 无法访问临时位置。   操作 - 请确保当前用户具有访问临时位置所需的权限。   附加信息:  - 所有节点上的框架设置检查都失败  

一条道走到黑的GISer 1347

【刷题】编辑距离

编辑距离 编辑距离,是指将一个字符串转变为另一个字符串所需要的最少编辑次数。 许可的编辑操作包括3种: 插入——将一个字符替换成另一个字符 删除——插入一个字符 替换——删除一个字符 例如:   str1 = ‘kitten’ ,str2 = ‘sitting’   str1转换为str2可进行如下操作:     将k替换为s,kitten → sitten     将e替换为i,sitten...

u010384079的博客 565

告别手动画图!用Cadence SKILL写一个参数化电感PCell(附完整代码)

本文详细介绍了如何使用Cadence SKILL语言开发参数化电感PCell,实现电感版图的自动化生成。通过动态调整线宽、圈数等几何参数,自动创建端口并进行工艺规则校验,大幅提升高频电路设计效率。附完整代码示例,帮助工程师快速掌握PCell开发技巧。

weixin_30684743的博客 368

LeetCodes刷题总结3——编辑距离

题目 72. 编辑距离 - 力扣(LeetCode) (leetcode-cn.com) 思路 这道题拿到想了很久,三种变换方式,按照暴力的想法那么可能性太多了,根本无从下手。最后还是看题解。。。嗯,强大的dp方式。因为本题输入是两个字符串,那就可以变成一点点子串向前,划分子问题dp最在行了。定义dp[i][j]表示word1的前 i 个字母和word2的前 j 个字母的编辑距离的二维数组。 然后这么多情况怎么分析呢?打开画图板,先不考虑特殊,只看普遍的情况。假设现在循环到了word1的第i个字符和

weixin_53111016的博客 905

硬件原理图:从软件思维到硬件接口的嵌入式开发破局指南

本文为软件开发者提供了读懂硬件原理图的嵌入式开发破局指南。文章将硬件原理图类比为“硬件系统的架构图”,引导读者将软件API调用思维迁移到硬件接口理解上,详细解析了电阻、电容、二极管等常见元器件的“硬件API”功能与选型逻辑,并通过实战电路拆解,阐述了从原理图分析到驱动代码编写的完整思维链条,帮助开发者建立软硬件协同的系统级视角。

lg888的博客 496

OpenManus本地部署实战:从源码编译到浏览器路径优化全解析

本文详细解析了OpenManus本地部署的全过程,从源码编译到浏览器路径优化。涵盖环境准备、源码获取、模型配置、依赖安装等关键步骤,特别针对Windows系统下的chrome.exe路径修改提供了实用解决方案,帮助开发者高效完成部署并优化性能。

weixin_28826545的博客 381

c++刷题_LeetCode刷题实战72:编辑距离

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !今天和大家聊的问题叫做编辑距离,我们先来看题面:https://leetcode-cn.com/problems/edit-distanceGiven two words word1 and word...

weixin_39850143的博客 165

生信小白必看:手把手教你用R语言实现counts/FPKM/TPM互转(附代码)

本文为生信初学者详细讲解如何使用R语言实现counts、FPKM和TPM三种转录组表达量单位的精准转换,包含完整代码示例和常见问题解决方案。重点解析了FPKM与TPM的数学原理及转换方法,帮助读者掌握RNA-seq数据分析中的关键预处理步骤,提升差异表达分析的准确性。

weixin_27442001的博客 498

力扣72-编辑距离(Java详细题解)

编辑具体的最佳解决办法,快来看看吧。

2302_79761426的博客 1234

构建可编程记忆系统:OpenClaw-SuperMemory本地部署与智能知识管理实战

在信息过载的时代,高效的知识管理与智能检索成为技术从业者的核心需求。向量数据库与嵌入模型技术通过将文本转化为高维向量,实现了基于语义相似度的智能搜索,突破了传统关键词匹配的局限。这项技术的核心价值在于将静态存储的信息转化为可动态查询和计算的知识资产,极大地提升了信息调用的准确性和效率。其应用场景广泛,从个人笔记管理、对话历史归档到企业知识库构建都能发挥关键作用。本文聚焦于开源项目OpenClaw-SuperMemory,它正是基于这一技术栈,通过本地化部署实现了可编程记忆系统的构建。项目集成了ChromaD

weixin_42525482的博客 319

Idea插件Plugins无法联网下载 解决方法(终极版必解决!)

插件联网的Bug疑难杂症,网络上不一样的解决方式以及独特的彩蛋!包解决

码农研究僧的博客 5516

LeetCode第72题_编辑距离

给你两个单词word1和word2,请返回将word1转换成word2所使用的最少操作数。

qq_40263592的博客 1288

YOLOv8交通监控全方案:精准车辆计数+违章(闯红灯/压线)识别,拿来就落地!

作为深耕计算机视觉落地的开发者,我见过太多交通监控的“伪智能”——传统系统要么车辆计数不准(漏计/重复计数),要么违章识别滞后(靠人工回看录像),甚至连“闯红灯、压线”这类常见违章都无法实时判定,完全满足不了实际交通管理需求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 646

LeetCode 72 —— 72.编辑距离

...最后有一种边界情况,如果要比较一个空的字符串与一个非空的字符串,那么编辑距离就是非空字符串的长度。但是实际上,我们可以直接替换 n 为 x,替换 i 为 e,这样就可以得到最短路径 = 2。这个时候前面的 i -> e, 也直接替换就可以了,所以其距离就是这两次替换,也就是 2。我们只看最后一个字母,就是 n -> x,我们直接将其替换就可以了。上面这两种方案都是先删除,再替换,再增加,都是绕远路的办法。以上的三种路径中,我们取其最小值即可。的距离为 2, 所以在这条路径上,的距离为 1...

刘伟佳的博客 1674

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

LeetCode第 72 题:编辑距离(C++)

72. 编辑距离 - 力扣(LeetCode) 类似题: LeetCode第 1143 题:最长公共子序列(C++)_zj-优快云博客 关于编辑距离dp可以看这儿: 数据结构与算法:42 | 动态规划实战:编辑距离与最长公共子序列_zj-优快云博客 如果 a[i]与 b[j]匹配,递归考察 a[i+1]和 b[j+1]。 如果 a[i]与 b[j]不匹配,那有多种处理方式可选: 可以删除 a[i],然后递归考察 a[i+1]和 b[j]; 可以删除 b[j],然后递归考察 a[i]和 b[j+1];

zj 670

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

力扣LeetCode72.编辑距离及Python源码实现

本题为LeetCode题库中第72题编辑距离,难度困难,题目请参考这里。这道题应该是字符串处理,自然语言算法工程师必做一道题目,很久都没想到解决思路突然有了灵感。 标准的DP题目,这道题的难点还是在于如何去定义状态转移方程,前面分享的那道地下城游戏也是难在定义状态转移方程,所以如何去定义才是最重要的!然后就是推导出如何变换。这种题很容易就想复杂了,而且情况一多根本就不知道怎么入手,这就陷入了僵局,如何跳出来?只能多刷题培养这种思维。 定义: 当字符串word1的长度为i,字符串word2的长度为j

Alex__Mahone的专栏 960

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【LeetCode】72. 编辑距离

本文介绍了经典的编辑距离问题(Levenshtein Distance),用于计算将字符串word1转换为word2所需的最少操作次数(插入、删除或替换字符)。通过动态规划方法,定义状态dp[i][j]表示word1前i个字符转换为word2前j个字符的最少操作数。当字符相同时直接继承前一状态,不同时取替换、删除或插入操作的最小值。文章分析了问题的本质、核心思想、关键难点和典型情况,对比了不同算法的时间/空间复杂度(二维DP为O(mn),一维优化为O(n)),并提供了详细的算法流程图和代码实现。最后给出了空

qq_32019341的博客 909

【dp】LeetCode 72:编辑距离

我们定义lena和lenb分别为两个字符串的长度,那么求解Question(lena - 1, lenb - 1),Question(lena , lenb - 1),Question(lena - 1, lenb)就是缩小条件后的子问题,Question(0, 0)就是最小的子问题。通过观察,当word1为空时,word1所转换为word2的字串所需要的最小的操作次数即为word2字串的长度。3、求解简单子问题,判断是否有可以直接求解的子问题。三、求解简单子问题,判断是否有可以直接求解的子问题。

2301_76606232的博客 709

【每日算法】LeetCode 72. 编辑距离

编辑距离算法解析 编辑距离(Levenshtein距离)是衡量两个字符串相似度的经典算法,计算将一个字符串转换为另一个所需的最少操作次数(插入、删除或替换字符)。本文介绍了三种实现方法: 基础动态规划:使用二维数组存储中间结果,空间复杂度O(mn) 优化动态规划:仅使用一维数组,空间复杂度降为O(min(m,n)) 递归+记忆化:自上而下的递归解法,配合记忆化提高效率 该算法在前端开发中有广泛应用,如文本差异对比、拼写检查等场景。通过动态规划的状态转移方程,可以高效解决这个序列比对问题。

LYFlied的博客 1038

LeetCode72 编辑距离

LeetCode72 编辑距离 算法思想:这是一个经典的笔试面试题。这里用到DP的方法求解,dp(i)(j)表示的是第一个字符串的第i个位置和第二个字符串的第j个位置的编辑距离。要计算这个编辑距离就可以从dp(i-1)(j-1)和dp(i-1)(j)和dp(i)(j-1)这几个角度去考虑。当第i-1个字符和第j-1个字符相等的时候,dp(i)(j)=dp(i-1)(j-1),否则的话,可能是修改...

raoxinyue的博客 696

力扣小白刷题之72题编辑距离

题目描述 给定两个单词 word1 和 word2,请你计算出将word1 转换成 word2所使用的最少操作数。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 思路 动态规划告诉我们可以 自底向上 去思考一个问题,思路是:先想这个问题最开始是什么情况,这个问题是两个字符串都为空字符串的时候,然后逐个地,一个字符一个字符加上去,在加字符的过程中考虑【状态转移】。 由于要考虑空字符,因为状态空间要多设置一行,多设置一列。 方法:动态规划 第一步:状态定义 定义 dp[

weixin_43525710的博客 309

力扣72题编辑距离

去三者的最小值,就是最小的编辑次数。

qq_40603125的博客 560

LeetCode72-编辑距离

LeetCode72-编辑距离 Leetcode / 力扣 72. 编辑距离: 给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: 输入:word1 = "horse", word2 = "ros" 输出:3 解释: horse -> rorse (将 'h' 替换为 'r') rors

baodream的博客 593

leetcode 72. 编辑距离

leetcode 72. 编辑距离 题目描述 给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: 输入:word1 = "horse", word2 = "ros" 输出:3 解释: horse -> rorse (将 'h' 替换为 'r') rorse -> rose (删除 'r') rose -> ros (删除 'e') 示

小白的成长 269

Leetcode 72. 编辑距离

Leetcode 72. 编辑距离 标签: Leetcode 题目地址: https://leetcode-cn.com/problems/edit-distance/ 题目描述 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字...

CoderWangSon 1031

【算法题】72. 编辑距离-力扣(LeetCode)

本题看初看题目的增、删、改,会感觉非常困难,因为我们自己在利用例子模拟的时候都比较难。 但是我们不妨换个思路,利用动态规划的思想,将这个问题转换成一个个子问题,利用子问题的答案来得出最终答案。

Janium的博客 834
上一篇: 教你打造一款高逼格的Vim神器
下一篇: 一款轻量级,可快速上手的开源后台系统
编程IT圈
博客等级 码龄6年 1130粉丝 544原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值