LeetCode72 Edit Distance(编辑距离)

LeetCode 72 - 编辑距离 (Edit Distance) 是经典的动态规划问题,重点在于掌握基本的二维动态规划算法,理解动态规划的状态定义与转移,同时还能扩展到许多字符串匹配变体问题。这道题在算法和面试中的重要性极高,以下是解法及相关变体总结。 阅读详情

本题是LeetCode 第72题,可以用动态规划来求解。github地址点击链接。

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

Example 1:
Input: word1 = "horse", word2 = "ros"
Output: 3
Explanation: 
horse -> rorse (replace 'h' with 'r')
rorse -> rose (remove 'r')
rose -> ros (remove 'e')

分析

动态规划的典型题:求最小步长,可以通过最优子结构n-1来推导n的情况
状态转移方程:
dp二维数组,用来保存word1 第0...i个字符变化到word2 第0...j个字符的最小步长
一共有三种策略:删,添,改。
1)若 word1[i] == word2[j] ,则不用进行操作dp[i+1][j+1] = dp[i][j]
2) 若 word1[i] != word2[j] , 则可以通过三种策略:删,添,改当前字母,
使word1[0...i]->word2[0...j]字符串。三种策略对应如下:
    删:dp[i+1][j+1] = dp[i][j+1] + 1
    添:dp[i+1][j+1] = dp[i+1][j] + 1
    改:dp[i+1][j+1] = dp[i][j] +1
取出最小更新到dp[i+1][j+1]就是状态转移方程,即dp[i+1][j+1] = min(dp[i+1][j],min(dp[i][j],dp[i][j+1]))+1;
例
  word1="horse" word2="ros"
  dp[][]  "" r o s
        "" 0 1 2 3
        h  1 1 2 3 
        o  2 2 1 2
        r  3 2 2 2
        s  4 3 3 2
        e  5 4 4 3

注:由于本例dp数组只需要记录当前行以及上一行(i和i-1行),其他行数都不需要,可以通过3行的滚动数组来存储,用来降低空间复杂度。

#include <vector>
#include <string>
#include <algorithm>
using namespace std;

class Solution {
public:
    int minDistance(string word1, string word2) {

        int len1 = word1.size();
        int len2 = word2.size();

        //若为空,则特殊处理
        if(!len1) return len2; 
        if(!len2) return len1;

        //分配dp二维数组,用来保存word1 第0...i个字符变化到word2 第0...j个字符的最小步长
        vector<vector<int>> dp(len1+1,vector<int>(len2+1));
        for(int i=0; i <= len2; ++i)
            dp[0][i] = i;
        for(int i=0; i <= len1; ++i)
            dp[i][0] = i;

        //利用状态转移方程,填充数组
        for(int i=0; i<len1; ++i)
        {
            for(int j=0; j<len2; ++j)
            {
                if( word1[i] == word2[j])
                    dp[i+1][j+1] = dp[i][j];
                else
                {
                    dp[i+1][j+1] = min(dp[i+1][j],min(dp[i][j],dp[i][j+1]))+1;
                }
            }
        }
        return dp[len1][len2];
    }
};
Mamba-ST实战:用状态空间模型实现艺术风格迁移的5个关键步骤 本文详细介绍了如何使用Mamba-ST状态空间模型实现高效的艺术风格迁移,涵盖环境配置、数据预处理、模型架构、训练策略和推理优化等5个关键步骤。Mamba-ST基于SSM(状态空间模型)构建,在保持生成质量的同时显著降低计算复杂度,为风格迁移领域提供了新的解决方案。 阅读详情

相关推荐

科研绘图避坑指南:用PyMol制作期刊级蛋白-配体相互作用图(含氢键显示技巧)

本文是一份专业的科研绘图避坑指南,详细讲解如何利用PyMol软件制作符合期刊发表标准的蛋白-配体相互作用图。文章重点分享了从构图逻辑、精准选择到氢键等相互作用的艺术化表达技巧,并提供了视觉优化与期刊适配的终极参数设置,帮助科研人员产出兼具科学严谨性与视觉美感的专业图表。

weixin_29292431的博客 270

leetcode 72.Edit distance 解题报告

这是一道经典的动态规划的题目,虽然我自己也没有写出来状态转移方程就是了。 用dp[i][j]来表示word1[0…i-1]转移到word2[0…j-1]的最小步数 其中i的取值从1到word1.length(),j的取值从1到word2.length() 很容易有边界条件: dp[i][0] = i,dp[0][j] = j,表示从一个前缀与空串的转移关系 然后推导状态转移方程 对于dp[i][j...

生息之地 245

Isaac Sim 车辆动力学:从参数调优到户外仿真的挑战与实战

本文深入探讨了Isaac Sim在车辆动力学仿真中的应用,从参数调优到户外场景模拟的实战经验。详细解析了悬架系统、轮胎物理模型等核心参数的设置技巧,并分享了应对户外仿真挑战的实用方案。通过Vehicle Wizard高级使用和传感器配置,帮助开发者高效完成车辆仿真与算法开发。

weixin_29192211的博客 404

LeetCode第72题--编辑距离

给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: 输入: word1 = “horse”, word2 = “ros” 输出: 3 解释: horse -> rorse (将 ‘h’ 替换为 ‘r’) rorse -> rose (删除 ‘...

king3wade的博客 288

OBD诊断协议:OBDⅡ (SAE J1979) 和 OBDonUDS (SAE J1979-2) 和ZEV OBD技术架构的详细对比

摘要:文章对比了2025年最新OBD技术标准(SAEJ1979系列)的三大架构:传统OBD-II(已淘汰)、OBDonUDS(燃油/混动车)和ZEVOBD(新能源车)。核心发现:1)OBDonUDS与ZEVOBD共享UDS协议栈和DoIP通信标准,仅应用层数据(DID/DTC)不同;2)物理层统一为CAN+以太网,支持远程诊断和OTA;3)诊断工具需同时兼容J1979-2/3数据库。技术演进呈现"协议统一化、数据专用化"趋势,2027年后所有新车将强制采用新标准。

m0_56482679的博客 2383

YOLOv11改进策略【Neck】| 替换RT-DETR中的CCFF跨尺度特征融合颈部结构,优化计算瓶颈与冗余问题

RT-DETR中的CCFF模块用于优化多尺度特征融合,解决传统方法的计算瓶颈与冗余问题,提升模型速度与精度,以适应实时检测需求。

Limiiiing的博客 1830

【LeetCode 72】 Edit Distance【H】

给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符; 删除一个字符; 替换一个字符; 在此之前,我们要明确我们的实现思路:将 word2 固定不变,通过改变 word1 来使得 word1 变成 word2。 思路 (DP) 定义:dp[i][j] 为从 word1[0,…,i-1] ...

大大的西部片—专栏 257

改进yolov8|BackBone改进:PWConv、FasterNeXt替换yolov8主干网络

各位哥哥姐姐弟弟妹妹大家好,我是干饭王刘姐,主业干饭,主业2.0计算机研究生在读。和我一起来改进yolov8变身计算机大牛吧!本文中的论文笔记都是刘姐亲自整理,原创整理哦~

weixin_44379985的博客 748

算法: 最小步骤使两个字符串相等72. Edit Distance

72. Edit Distance Given two strings word1 and word2, return the minimum number of operations required to convert word1 to word2. You have the following three operations permitted on a word: Insert a character Delete a character Replace a character Exampl

AI架构师易筋 874

YOLO26改进策略【Neck】| CVPR2025 LCA轻量交叉注意力 跨层级双向引导 + 分层降噪增强,提升微小目标特征表达

简单相加、拼接融合无法建立深浅层双向约束关系,浅层微小目标易被深层背景覆盖,深层全局信息难以修正浅层噪声;普通单路自注意力仅单一层内建模依赖,缺少跨层级特征互引导机制,深浅特征信息割裂;标准多头跨注意力计算量大、参数量高,轻量化单模态检测/分割网络部署困难,无法区分前景目标与背景噪声。为此设计单模态轻量化交叉注意力LCA,构建浅层细节、深层语义双分支双向引导结构,轻量完成跨层级特征交互,同步降噪并强化单模态微小目标特征。

Limiiiing的博客 522

YOLOv10改进,YOLOv10二次创新C2f结构采用WTConv卷积(感受野的小波卷积),ECCV 2024

WTConv 的核心思想是通过结合卷积神经网络(CNN)的强大特征提取能力与小波变换的多尺度特性,来实现大感受野的卷积操作,同时避免传统大卷积核带来的参数爆炸问题。传统的卷积操作通过滑动小窗口在图像上逐步执行局部特征提取,感受野的大小直接取决于卷积核的尺寸。随着卷积核的增大,参数量呈指数增长,导致网络训练效率降低、计算资源消耗增加。为解决这些问题,WTConv 提出了在小波域中执行卷积操作的策略。小波变换是一种常用于信号处理的技术,能够将信号分解为不同频率成分。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1022

LeetCode72. 编辑距离(动态规划)

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

Imfondof 291

【2022】人工智能☆✨

1. 朴素⻉叶斯⽅法是⼀种 ( ) ⽅法。A.机器学习的分类B.不确定性推理C.知识表示答案:A解析:朴素贝叶斯分类器是基于贝叶斯定理与特征条件独立假设的分类方法。它通过学习训练数据集来预测未知数据的类别标签,因此属于机器学习中的监督学习分类方法。选项B不确定性推理和选项C知识表示虽然与朴素贝叶斯方法有一定的关联,但它们并不是朴素贝叶斯方法的主要应用领域或定义特性。2. 关于启发式搜索描述正确的是 ( )。

super_mochi1 391

单词拼写纠正-03-72.力扣编辑距离 leetcode edit-distance

如果问题变得更复杂,例如目标字符串是一个大字典中的单词,并且需要用最少的操作将一个单词转化为目标字典中的某个单词时,可以使用 A* 搜索算法。但是,由于动态规划中的每个状态只依赖于上一行和当前行的数据,因此可以将空间优化为一维数组,从而减少空间复杂度。不过,A* 在本问题中的应用较少,因为它需要定义一个启发式函数,并且在大多数情况下,动态规划已经足够高效。记忆化递归是暴力递归的一种优化,通过在递归过程中记录已经计算过的子问题的结果,避免了重复计算。来记录子问题的结果,动态规划能够从底向上计算出最小操作数。

915

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

leetcode 72. Edit Distance 编辑距离

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

爱喝舒化奶的博客 551

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Leetcode算法——72、编辑距离(edit distance)

给定两个单词 word1 和 word2,找到将 word1 转化为 word2 所需的最少操作步数。(这个步数称为两个单词的编辑距离) 对一个单词可以执行以下三种操作: 1、插入一个字符 2、删除一个字符 3、替换一个字符 示例: Example 1: Input: word1 = "horse", word2 = "ros" Output: 3 Explanation: horse -&gt...

HappyRocking的专栏 1708

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LeetCode 72. 编辑距离(Edit Distance)

LeetCode.jpg 72. 编辑距离 72. 编辑距离 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: 输入: word1 = "horse", word2 = "...

墨1024 319

Leetcode 72. Edit Distance 编辑距离

Leetcode 72. Edit Distance 编辑距离72. Edit Distance 编辑距离题目描述示例:解答代码 72. Edit Distance 编辑距离 题目描述 Given two words word1 and word2, find the minimum number of operations required to convert word1 to word2. ...

importsys的博客 548

【DP】【编辑距离】LeetCode - 72. Edit Distance

LeetCode - 72. 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: Inser...

Bob__yuan的博客 1309

Leetcode72. 编辑距离Edit Distance(Java)

Leetcode72. 编辑距离Edit Distance(Java) 动态规划 对字符操作的顺序并不能影响结果 因此,将字符串操作顺序规定为从左到右操作 f(i,j)f(i,j)f(i,j)表示将长度为i的字符串A修改成为长度为j的字符串B的操作所需的最小操作数 则只可能分以下6种情况 字符串A末尾删除一个字符后与字符串B相同 f(i,j)=f(i−1,j)+1f(i,j) = f(i - 1, j) + 1f(i,j)=f(i−1,j)+1 表示字符串A的前i-1项与字符串的前j项相同,只需进行一次

qq_42411921的博客 219

【leetcode】-72. Edit Distance 编辑距离 python

72. Edit Distance题目动态规划python代码 题目 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

。 215

LeetCode 72. Edit Distance(编辑距离)

原题网址:https://leetcode.com/problems/edit-distance/ Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.) Y

James Pan 775

动态规划 Leetcode 72 Edit Distance(编辑距离)

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

weixin_39228381的博客 6652

Leetcode 72.编辑距离(Edit Distance)

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

qq_39378221的博客 225

Leetcode 72. Edit Distance 编辑距离 解题报告

1 解题思想编辑距离,即给了字符串T1和字符串T2,试问通过插入、删除、替换等的操作,T1可以通过几步变换成T2?这道题首先还是动态规划解决,构建n*m矩阵,位置[i,j]标示串T1[0,i]和T2[0,j]的编辑距离。显而易见的是,对于矩阵中的i,j位置,他可以有如下三种方式变换: 1、从i-1,j 为T1增加一个字符,获得i,j,这样编辑距离本身就需要+1 2、同理,从i,j-1过来,编辑距

MebiuW的专栏 5253

LeetCode 72. 编辑距离 (Edit Distance)

如果 word1[i-1] == word2[j-1],这意味着当前两个子串的末尾字符已经匹配,我们不需要为它们付出任何操作代价。问题直接简化为将 word1 的前 i-1 个字符转换成 word2 的前 j-1 个字符。替换操作:将 word1[i-1] 替换为 word2[j-1]。这样末尾就匹配了,总成本等于 1 次替换操作 + word1 前 i-1 个字符到 word2 前 j-1 个字符的成本。然后我们需要将 word1 的前 i 个字符转换成 word2 的前 j-1 个字符。

qq_36607524的博客 385
上一篇: 正则表达式小结
下一篇: Linux CPU上下文切换对性能的影响
EricHu0607
博客等级 码龄9年 3粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值