【力扣72. 编辑距离 (动态规划)】思路、详细图示、代码

文本相似性计算之编辑距离详解 文本相似性计算之编辑距离详解 概述: 编辑距离(Edit Distance):是一个度量两个字符序列之间差异的字符串度量标准,两个单词之间的编辑距离是将一个单词转换为另一个单词所需的单字符编辑(插入、删除或替换)的最小数量。一般来说,编辑距离越小,两个串的相似度越大。 编辑距离是1965年由苏联数学家Vladimir Levenshtein发明的。Levenshtein Distance也被称为编辑距离(Edit Distance)。 一、Levenshtein.distance(str1, str2); 阅读详情

力扣72. 编辑距离

力扣72. 编辑距离

题目

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

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

  • 插入一个字符
  • 删除一个字符
  • 替换一个字符

示例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’)

解题思路

  • 动态规划:

    dp[i][j]代表word1中第i个字符变化到word2中第j个字符的最少操作次数

  • 初始化:

    考虑i j为0的情况:

    ‘’ros
    ‘’0123
    h1
    r2
    o3
    s4
    e5
  • 操作规则

    • 增加(列变化):

      从上一列变过来,即dp[i][j-1] -> dp[i][j] 增加一个元素

      增加.png

    • 删除(行变化):

      从上一行变过来,即dp[i-1][j] -> dp[i][j] 删除一个元素

    删除.png

    • 替换(可以理解为删了又增了):

      从上一行上一列变过来即dp[i-1][j-1] ->dp[i][j]替换一个元素

      替换.png

  • 具体操作

    • 不需要操作时:word1中第i个元素与word2中第j个元素相同时

      即 word1.charAt(i-1) == word2.charAt(j-1) 时 dp[i][j] = dp[i-1][j-1]

    • 需要操作时:选取增、删、改中操作次数最少的方式,操作+1

实例1的解决图示:

  • 红色箭头:+1操作(选取增、删、改操作中最小的)
  • 绿色框:word1中第i个元素与word2中第j个元素相同
  • 绿色箭头: dp[i][j] = dp[i-1][j-1]
    image.png

代码

class Solution {
    public int minDistance(String word1, String word2) {
        int l1 = word1.length();
        int l2 = word2.length();
        int[][] dp = new int [l1+1][l2+1];

        //初始化第一行与第一列
        for(int i = 1; i<=l1; i++) dp[i][0] = dp[i-1][0] + 1;
        for(int i = 1; i<=l2; i++) dp[0][i] = dp[0][i-1] + 1;

        /*
         不需要操作时,即word1中第i个元素与word2中第j个元素相同时
         即 word1.charAt(i-1) == word2.charAt(j-1) 时 dp[i][j] = dp[i-1][j-1]
        */
        /*
        需要操作时:
        1. 从上一行变过来即dp[i-1][j] -> dp[i][j] 删除一个元素
        2. 从上一列变过来即dp[i][j-1] -> dp[i][j] 增加一个元素
        3. 从上一行上一列变过来即dp[i-1][j-1] -> dp[i][j] 替换一个元素
        */ 
        for(int i=1; i<=l1; i++){
            for(int j=1; j<=l2; j++){
                if(word1.charAt(i-1) == word2.charAt(j-1)){
                    dp[i][j] = dp[i-1][j-1];
                }else{
                    //之前操作次数最少的方式
                    //min方法输入参数形式为(int,int),三个数比较需要用两次
                    dp[i][j] = Math.min(Math.min(dp[i-1][j-1], dp[i][j-1]), dp[i-1][j]) + 1;
                }
            }
        }
        return dp[l1][l2];  
    }
}
【DP动态规划】编辑距离—力扣 动态规划解决编辑距离问题 阅读详情

相关推荐

编辑距离算法(Edit Distance)

目录 概念 算法过程 Python实现 概念 编辑距离的作用主要是用来比较两个字符串的相似度的 基本的定义如下所示: 编辑距离,又称Levenshtein距离(莱文斯坦距离也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 这个概念是由俄罗斯科学家Vladimir Levenshtein在1965年提出来的,所以也叫 Levens.

Python,数据分析,机器学习,深度学习 7996

详解编辑距离算法-Levenshtein Distance

目录 •写在前面 •什么是编辑距离? •思路 •思路可视化 •代码实现 •写在前面 编辑距离算法被数据科学家广泛应用,是用作机器翻译和语音识别评价标准的基本算法。最简单的方法是检查所有可能的编辑序列,从中找出最短的一条。但这个序列总数可能达到指数级,但完全不需要这么多,因为我们只要找到距离最短的那条而不是所有可能的序列。这个概念是由俄罗斯科学家Vladimir Levenshtein...

BoCong-Deng的博客 3万+

LeetCode 第72题:编辑距离

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

Gemini的博客 759

编辑距离算法详解:Levenshtein Distance算法

算法基本原理:假设我们可以使用d[ i , j ]个步骤(可以使用一个二维数组保存这个值),表示将串s[ 1…i ] 转换为 串t [ 1…j ]所需要的最少步骤个数,那么,在最基本的情况下,即在i等于0时,也就是说串s为空,那么对应的d[0,j] 就是 增加j个字符,使得s转化为t,在j等于0时,也就是说串t为空,那么对应的d[i,0] 就是 减少 i个字符,使得s转化为t。 然后我们...

weixin_30909575的博客 1999

密码学新手必看:三大顶级会议论文下载与阅读指南(附完整资源链接)

本文为密码学新手提供了系统性的三大顶级会议(Crypto、Eurocrypt、Asiacrypt)论文学习指南。内容涵盖如何高效获取最新论文资源、结构化精读论文的方法论,以及将理论转化为代码实践的路径,旨在帮助初学者快速构建密码学知识体系并应用于研究。

weixin_29214691的博客 321

别再到处找包了!Keil5芯片支持包(Pack)最全管理指南:安装、更新、迁移与离线备份

本文详细解析了Keil5芯片支持包(Pack)的全生命周期管理,包括安装、更新、迁移与离线备份的工程化解决方案。针对STM32F10x等常见芯片,提供了高效获取Pack的策略、版本管理技巧及团队协作方案,帮助开发者解决常见的'Device Family Pack missing'等问题,提升嵌入式开发效率。

weixin_28729205的博客 542

LeetCode 每日一题 72. 编辑距离 动态规划 C++描述

LeetCode 每日一题 72. 编辑距离 大家好,我叫亓官劼(qí guān jié ),三本计算机在读,目前在积极准备21计算机考研中,同时也在学习后端开发,准备工作。不敢孤注一掷,因为要留条后路;不求两全其美在,因为那需要运气+机遇;只求学有所得,慢慢成长。优快云中记录学习的点滴历程,时光荏苒,未来可期,加油~ 2020.04.06 每日一题 难度 困难 题目 给你两个单词 word...

一起加油 6169

TMS320F280049C 学习笔记21 交叉开关 Crossbar (X-BAR)

简单介绍了X-BAR。

whyorwhnt的专栏 2万+

力扣 72. 编辑距离——动态规划经典例题

你有没有想过,拼写软件是如何知道你想输入哪个单词的?DNA序列比对又是如何衡量相似度的?这一切的背后,都离不开一个经典算法——编辑距离。它通过计算字符串之间最少的插入、删除和替换次数,来衡量两个文本的相似程度。本文将以 LeetCode 第 72 题为例,从零开始推导动态规划解法,并通过详细的代码注释带你一步步掌握这道题的完整思路。

casually的博客 1590

【Python脚本】Python自动大麦网抢票,准点原价秒杀演唱会门票,拒绝黄牛交易!从我做起!!!1

你是否错过了周杰伦的票,最近又没抢到五月天的票,不要太难过,今晚有张学友的票,后天还有张杰的票,加油哦!

weixin_45841831的博客 6万+

MIC卡的OFED驱动安装

 IB网络和OFED驱动安装 IB InfiniBand是一个统一的互联结构,可以处理存储I/O、网络I/O和进程间通信(IPC)。它可以将磁盘阵列、SANs、LANs、服务器和集群服务器进行互联,也可以连接外部网络(比如WAN、VPN、互联网)。设计InfiniBand的目的主要是用于企业数据中心,大型的或小型的。目标主要是实现高的可靠性、可用性、可扩展性和高的性能。Inf

beglorious的专栏 5106

力扣72:编辑距离

本文介绍了力扣72题"编辑距离"的动态规划解法。该题要求计算将word1转换为word2所需的最少操作次数,操作包括插入、删除或替换字符。通过分析三种操作之间的等价关系,将问题转化为取三种子问题的最小值:对A插入字符、对B插入字符或替换字符。使用二维数组dp[i][j]表示word1前i个字符到word2前j个字符的编辑距离,通过状态转移方程dp[i][j] = min(dp[i-1][j]+1, dp[i][j-1]+1, dp[i-1][j-1])求解,最终返回dp[n][m]作为结

weixin_74285822的博客 1061

innovus:如何在init design之后新增参考库(lib/lef)

如题,在PR过程中经常会遇到这种问题,时序无法收敛,需要新增一套lvt或者hpc的库,怎么办?

m0_61544122的博客 5013

[动态规划]Leetcode72.编辑距离(python)

[动态规划]Leetcode72.编辑距离 如果读者对于动态规划思路解法还不是很了解,可以先点击链接查阅我之前的一篇博文《算法之【动态规划】详解》,很详细的介绍了动态规划求解思路及方法,有利于你更好的学习动态规划。 题目描述 给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例1 输入:word1 = “horse”, word2 = “ros” 输出:3

阿旭的博客 708

知识图谱大模型系列之 12 LLM 知识图谱构建器:从零到 GraphRAG 使用 LLM 知识图谱生成器在 GenAI 应用中提取和使用知识图谱(教程含源码)

为了更深入地了解 LLM 知识图谱构建器,GitHub 存储库提供了大量信息,包括源代码和文档。此外,我们的文档提供了详细的入门指南,而GenAI 生态系统则提供了有关可用更广泛工具和应用程序的进一步见解。

iCloudEnd的博客 2037

飞牛NAS1.1.19更新后SSH连不上?两步快速恢复连接

飞牛NAS1.1.19版本更新后SSH无法连接😟,实则是官方安全策略升级默认关闭了该服务,本文分享两步实操配置恢复SSH连接💻,还同步了官方的设备安全配置建议,帮助用户兼顾使用与设备防护🔒。

XiaoqiangClub的博客 2110

LeetCode-72. 编辑距离【字符串 动态规划】

那么就在回顾上面讲过的dp[i][j]的定义,word1[i - 1] 与 word2[j - 1]相等了,那么就不用编辑了,以下标i-2为结尾的字符串word1和以下标j-2为结尾的字符串word2的最近编辑距离dp[i - 1][j - 1]就是 dp[i][j]了。if (word1[i - 1] == word2[j - 1]) 那么说明不用任何编辑,dp[i][j] 就应该是 dp[i - 1][j - 1],即dp[i][j] = dp[i - 1][j - 1];

zik的博客 1573

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【算法入门】LeetCode 72:编辑距离 - 动态规划(Java & JavaScript)|力扣72. 编辑距离题解:Java与JavaScript动态规划详解|动态规划经典问题详解

每个状态的定义和出发边界拼写校验、基因突变等可以用滚动数组优化空间复杂度到 O(n)坚持编程练习,逐步深入,你会发现动态规划的世界其实超精彩!祝你编码顺利,算法不断突破!编辑距离问题是一个经典的动态规划问题,通过构建 DP 表,我们能够高效地计算出将一个字符串转换为另一个字符串所需的最少操作数。希望本文能帮助你更好地理解这一问题及其解决方案,掌握动态规划的基本思想是解决许多类似问题的关键。定义dp[i][j]表示将word1的前i个字符转换成word2的前j个字符所使用的最少操作数。

南北极之间 880

VB摄像头监控

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LeetCode第72题_编辑距离

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

qq_40263592的博客 1289

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

动态规划LeetCode-72.编辑距离

这题是编辑距离的最少次数,我们把dp[i][j]的含义为:word1的前i个字符编辑转换成word2的前j个字符所需要的最少次数。初始化:(0,0)为空字符,所以dp[0][0]等于0,第一行空字符word1组成word2的则是一直插入的操作,所以dp[0][j] = j;来进行解题,动规五部曲(dp含义、递推公式、初始化、遍历顺序、打印数组) ,主要的就是把大问题拆解成小问题,小问题的值保存下来,从小问题的答案推导到最终答案,空间换时间。horse -> rorse (将 'h' 替换为 'r')

2303_80070412的博客 921

LeetCode72. 编辑距离——动态规划详细解题思路

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

qq_38261445的博客 2108

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

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

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

LYFlied的博客 1038

leetcode72. 编辑距离(动态规划-java)

这样就是一个完整的操作,这几个操作怎么反应到代码中呢,我们用指针卡住两个单词的起始位置或者终点位置,然后一个一个字符去比较,相等,我们就跳过,不等就替换删除或者插入的操作。我们这题,从尾部开始向前去比较操作,你也可以从头往后比较,区别就是,base case .和指针移动方向步一样,你可以自己改写下。我们可以把dp表中两边为0位置时,需要操作的长度就是字符的长度,可以直接填上,剩下位置就可以按暴力递归中的依赖关系去填上了。horse -> rorse (将 ‘h’ 替换为 ‘r’)

SP_1024的博客 899

【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编辑距离

dp[i][j] 表示以下标i-1为结尾的字符串word1,和以下标j-1为结尾的字符串word2,最近编辑距离为dp[i][j]。当前字符不同,有三种操作选择:(将。所使用的最少操作数。从上到下从左到右去遍历。

luckyme_的博客 1192
上一篇: 【JavaScript:数据类型】
下一篇: 【力扣149. 直线上最多的点数】
莱布尼杰
博客等级 码龄9年 3粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值