二维动态规划----5.编辑距离

单词的编辑距离(动态规划) 算法特点及适用场景动态规划解决编辑距离问题的特点是通过保存子问题的解,避免了重复计算,能够高效地计算出两个单词之间的编辑距离。适用于各种文本处理、字符串相似性比较等场景,比如拼写检查、DNA 序列比对等领域,只要涉及到比较两个序列之间的差异程度并且操作类型有限且可量化(如本题中的插入、删除、替换操作),都可以考虑使用动态规划来解决。注意事项及可能遇到的问题在实现动态规划算法时,关键是正确定义状态和推导状态转移方程。如果状态定义不准确或者状态转移方程错误,将无法得到正确结果。 阅读详情

72. 编辑距离 - 力扣(LeetCode)

/**

        minOps[i][j]:代表S1与S2分别以i、j结尾(长度),将S1替换为S2需要的最少操作步骤

        若S1[i] == S2[j],则minOps[i][j] = minOps[i - 1][j - 1],

        即当前两字符相等,无需进行操作,minOps[i][j]取决于之前的状态,将S1、S2各自向前推一个字符即可

        若S1[i] != S2[j],说明当前两字符不相等,我们有插入、删除、替换三种操作方式

        插入:

            若在S1末尾(当前处理到的末尾)插入S2[j]:则此时S1、S2末尾元素i相同,退化至相等的情况,再各自向前推一个元素即可,由于S1末尾插入元素,向前推还是i

            则minOps[i][j] = 1 + minOps[i][j - 1] 即插入操作 + 各自向前推一个字符对应的状态

        删除:

            若删除S1末尾(当前处理到的末尾)元素,则S2无需进行处理,直接将S1向前推一个元素即可(并非真正删除,用向前推一个元素代表删除,避免影响其他情况)

            则minOps[i][j] = 1 + minOps[i - 1][j] 即删除操作 + S1向前推一个字符对应的状态

        替换:

            若将S1末尾元素(当前处理到的末尾),替换为S2[j],则退化至相等情况,再各自向前推一个元素即可

            则minOps[i][j] = 1 + minOps[i - 1][j - 1] 即替换操作 + S1、S2各自向前推一个字符对应的状态

        选择这三种状态中所需操作次数最小的一个即可

*/

class Solution {
    /**
        minOps[i][j]:代表S1与S2分别以i、j结尾(长度),将S1替换为S2需要的最少操作步骤

        若S1[i] == S2[j],则minOps[i][j] = minOps[i - 1][j - 1],
        即当前两字符相等,无需进行操作,minOps[i][j]取决于之前的状态,将S1、S2各自向前推一个字符即可

        若S1[i] != S2[j],说明当前两字符不相等,我们有插入、删除、替换三种操作方式

        插入:
            若在S1末尾(当前处理到的末尾)插入S2[j]:则此时S1、S2末尾元素i相同,退化至相等的情况,再各自向前推一个元素即可,由于S1末尾插入元素,向前推还是i
            则minOps[i][j] = 1 + minOps[i][j - 1] 即插入操作 + 各自向前推一个字符对应的状态
        删除:
            若删除S1末尾(当前处理到的末尾)元素,则S2无需进行处理,直接将S1向前推一个元素即可(并非真正删除,用向前推一个元素代表删除,避免影响其他情况)
            则minOps[i][j] = 1 + minOps[i - 1][j] 即删除操作 + S1向前推一个字符对应的状态
        替换:
            若将S1末尾元素(当前处理到的末尾),替换为S2[j],则退化至相等情况,再各自向前推一个元素即可
            则minOps[i][j] = 1 + minOps[i - 1][j - 1] 即替换操作 + S1、S2各自向前推一个字符对应的状态

        选择这三种状态中所需操作次数最小的一个即可
    */
    public int minDistance(String word1, String word2) {
        int len1 = word1.length();
        int len2 = word2.length();

        int dp[][] = new int[len1 + 1][len2 + 1];

        //初始化word1或word2为空
        for(int i = 1; i <= len1; i++) {
            dp[i][0] = i;
        }

        for(int j = 0; j <= len2; j++) {
            dp[0][j] = j;
        }

        for(int i = 1; i <= len1; i++) {
            for(int j = 1; j <= len2; j++) {
                if(word1.charAt(i - 1) == word2.charAt(j - 1)) {
                    dp[i][j] = dp[i - 1][j - 1];
                } else {
                    dp[i][j] = Math.min(Math.min(dp[i][j - 1], dp[i- 1][j]),dp[i - 1][j - 1]) + 1;
                }
            }
        }

        return dp[len1][len2];
    }
}

/lib//libclntsh.so: file format not recognized; treating as linker script centos7.7+oracle19.3 建库过程报错:预检查都是通过的 /oracle/product/19.3.0/db_1/lib/libasmperl19.a -Wl,--no-whole-archive -lclntsh -lclntshcore -lasmclntsh19 -lhasgen19 -lskgxp19 -locr19 -lcell19 -lirc INFO: /usr/bin/ld:/home/app/oracle/product/19.3.0/db_1/li... 阅读详情

相关推荐

【DSP】【工程实战】从零构建C6678多核工程:CCS环境配置与启动模式详解

本文详细介绍了在CCS开发环境中从零构建TMS320C6678多核DSP工程的完整流程。内容涵盖KeyStone架构解析、工程创建、基础代码编写、链接命令文件配置、仿真器调试,并重点深入讲解了包括I2C EEPROM在内的多种一级启动模式原理与配置方法,为开发者提供了一套清晰、可复用的实战指南。

weixin_29164185的博客 420

Qwen3.5-4B-Claude-Opus实际作品:动态规划问题状态转移方程推导实录

本文介绍了如何在星图GPU平台上自动化部署Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF镜像,实现高效算法问题解析。该镜像特别擅长动态规划等需要分步推导的任务,如最长递增子序列和编辑距离问题的状态转移方程推导,为开发者提供清晰的算法解决思路。

RubyLion56的博客 927

SAP销售订单POD实操:从VL01N创建到VLPOD差异处理,保姆级避坑指南

本文详细解析SAP销售订单POD全流程,从VL01N创建到VLPOD差异处理,提供保姆级避坑指南。涵盖核心业务逻辑、前置配置、销售订单创建、交货单处理及差异解决方案,帮助用户高效管理供应链执行环节,确保财务与物流的准确对接。

weixin_27219587的博客 626

动态规划实战:从LeetCode到面试,5个经典问题解析(附Python代码)

本文通过解析LeetCode上5个经典动态规划问题,包括爬楼梯、零钱兑换、最长递增子序列、编辑距离和打家劫舍,提供清晰的解题思路、Python代码实现及优化技巧。旨在帮助读者掌握动态规划的核心思想与实战应用,提升算法面试能力。

ipfs8storage的博客 448

2025年12月11日 Coherent收发器下沉到数据中心:调研

技术可行性已基本具备。随着3nm DSP技术的成熟和Coherent-Lite等低功耗方案的推出,Coherent技术与IMDD的功耗差距在800G及以上速率节点快速缩小。特别是在1.6T及更高速率,两种技术的功耗开始趋于收敛。同时,通过系统级优化,如将DSP功能从可插拔模块转移到ASIC芯片,可实现30%以上的功耗降低。在成本方面,硅光技术的进步使得单通道硅光引擎BOM成本降至18美元,较2020年下降62%,逼近InP方案的经济临界点。光学系统机会丰富多样。

weixin_51184047的博客 1168

20240128 C#与SCPI协议实战:轻量级仪器控制库ScpiNet应用指南

本文详细介绍了轻量级C#库ScpiNet在仪器控制中的应用。相较于传统的NI-VISA,ScpiNet无需安装庞大运行时,通过纯C#实现直接与USB或以太网设备通信,支持跨厂商SCPI仪器。文章提供了从快速连接到实战封装、错误处理的完整指南,帮助开发者构建简洁高效的自动化测试系统。

h9j8k7l6m5n的博客 548

力扣5. 最长回文子串、1143.最长公共子序列、72.编辑距离

使用中心拓展法,定点在中心,边界向左右拓展,从中间开始判断,若中间为回文串,左右边界为回文串,那么组合在一起仍然是回文串,注意不要越界,并分奇偶进行判断:一般地,枚举 i=0,1,2,…同理,枚举 i 和 i+1 作为偶回文串的中心,也就是初始化 l=i,r=i+1,其余做法同上。

qq_66799283的博客 417

32GB Jetson Orin SOM 不能刷机问题排查

拿到了一个新的Orin SOM,当用orin Devkit CVB或定制的CVB不能用Linux_For_Tegra刷机,flash日志(JetPack5.0DP和5.0.1DP都失败了) 2. 确认mb2配置中将CVB的eeprom读取大小设置是否为0 ? 已经确认是正常的 在定制的orin cvb flash上使用Orin devkit som,启动是成功的。但新得到的Orin som并不工作可以排除理由:使用Orin Devkit CVB和Orin SOM(不是Devkit SOM)仍然不能

jzwjzw19900922的博客 1499

【力扣hot100】多维动态规划(暴力→记忆化→DP 完整演进思路)

本文系统讲解力扣Hot100中多维动态规划(DP)的解题方法,提出"暴力递归→记忆化搜索→迭代DP"的三步走思维演进模板。通过5道高频真题(不同路径、最小路径和、最长回文子串、最长公共子序列、编辑距离)的详细拆解,阐述如何从暴力解法优化为最优DP方案。重点分析了状态定义、转移方程、初始化和遍历顺序等核心要素,特别针对矩阵路径、双字符串匹配、区间最值等典型场景提供通用解法。文章强调理解问题本质比记忆公式更重要,帮助读者掌握多维DP的底层逻辑,实现举一反三的解题能力。

lsir10110_的博客 373

深入解析雪球网股票行情数据爬取:基于WebSocket与API的实时数据获取技术实践

本文详细介绍了如何使用Python爬虫技术获取雪球网的股票行情数据,涵盖了WebSocket实时数据连接和RESTful API接口调用两种主要技术方案。完整的WebSocket客户端,支持实时行情订阅和数据处理功能丰富的API客户端,支持多种数据类型的获取数据存储和管理系统,使用SQLite进行数据持久化实时监控和预警系统,支持自定义预警规则技术指标计算,提供基本的数据分析功能。

2201_76125261的博客 1256

74、光谱成像在电子内窥镜及色彩理论中的应用

本文探讨了光谱成像在电子内窥镜中的应用及其与色彩理论的深度融合。通过分析FICE技术、色彩再现模型及胃黏膜光谱测量,展示了光谱信息在提升医学诊断准确性方面的潜力。同时,系统阐述了颜色的物理属性、标准表示方法、同色异谱现象、颜色测量技术(密度法与比色法)以及CIELAB等均匀颜色空间的构建原理。结合流程图与对比表格,梳理了从光信号获取到颜色处理的完整路径,并展望了人工智能与新型视觉模型在未来医疗成像与色彩科学中的发展方向。

g2h3i4j5的博客 153

Leetcode Hot 100 ——多维动态规划

Leetcode Hot 100 ——多维动态规划

qq_52421969的博客 581

SVN使用:使用TortoiseSVN遇到提示请执行“清理”命令的解决方法

作为程序员来说,在团队开发过程中关于代码管理的工具使用并不陌生,比较常用的代码合并管理工具如:Git、SVN等,虽然相关工具的使用并不复杂,但是还是要掌握常用的使用方法,尤其是相关的第三方软件的使用也是极为重要的,而且有时候使用这些三方软件来进行代码管理的时候也会遇到一些问题。本篇博文就来分享一下在SVN使用的时候使用TortoiseSVN遇到提示请执行“清理”命令的解决方法,方便查阅使用。

全沾软贱开发攻城狮 1万+

【力扣hot100】动态规划通关指南(5道经典题,从入门到hard讲透DP思维)

本文精选力扣Hot100中5道典型动态规划题目,由浅入深讲解解题思路。通过"暴力递归→记忆化搜索→迭代DP"的三步走模板,帮助读者建立完整的DP思维框架。 爬楼梯(70题):入门级一维DP,展示状态转移和空间优化技巧。 打家劫舍(198题):"选/不选"型DP模板,演示相邻约束的处理方法。 最长递增子序列(300题):子序列问题代表,展示O(n²)和O(nlogn)两种解法。 零钱兑换(322题):完全背包问题,讲解背包问题的通用解法。 编辑距离(72题):二维DP经

lsir10110_的博客 334

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

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

[hot100 NO.91~95]

本文总结了5种典型动态规划问题:不同路径、最小路径和、最长回文子串、最长公共子序列和编辑距离。重点介绍了空间优化技巧,指出通过仅保存上一行和当前行前一个值,可将二维DP数组优化为一维,有效降低空间复杂度。这些优化方法在保持时间复杂度的同时,显著提升了算法效率。

2401_83386596的博客 320

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

动态规划不会写?VibeThinker直接生成DP代码

本文介绍了如何在星图GPU平台上自动化部署VibeThinker-1.5B-WEBUI镜像,快速构建动态规划代码生成环境。用户可通过本地Web界面输入英文算法描述,即时获得带完整注释、状态定义和复杂度分析的可运行DP实现,显著提升算法学习与面试准备效率。

weixin_28895791的博客 296

VB摄像头监控

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

leetcode72. 编辑距离,二维动态规划

leetcode72. 编辑距离,二维动态规划

热爱C++和golang的学生 1128

动态规划:编辑距离

编辑距离(Edit Distance),又称为莱文斯坦距离(Levenshtein Distance),是衡量两个字符串之间的相似度的一种重要算法。具体来说,它计算从一个字符串转换到另一个字符串所需的最少操作次数。常见的操作包括插入一个字符、删除一个字符和替换一个字符。编辑距离算法在机器翻译、语音识别和拼写纠错等领域有广泛应用。题目给两个单词word1和word2请返回将word1转换成word2所使用的最少操作数。

Sxiaocai的博客 3665

动态规划—最小编辑距离

题目来源:牛客网链接:https://www.nowcoder.com/questionTerminal/9649617be3bf42288f50758df4310655 UNIX系统下有一个行编辑器ed,它每次只对一行文本做删除一个字符、插入一个字符或替换一个字符三种操作。例如某一行的内容是“ABC”,经过把第二个字符替换成“D”、删除第一个字符、末尾插入一个字符“B”,这三步操作后,内容就变...

zhonglixianyun的博客 1万+

详解编辑距离算法-Levenshtein Distance

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

BoCong-Deng的博客 3万+

动态规划——编辑距离系列问题

动态规划——编辑距离系列问题1 概述2 实战2.1 判断子序列2.2 不同的子序列 1 概述 编辑距离原题——72. 编辑距离,是LeetCode上的一道 hard 级别的题目,该题允许对两个字符串进行增删改(没有查)的操作,而一些类似的题目可能操作起来没有这道题这么复杂,但是也可利用同样的思路去做,因此我们把这些题型提取出来,当作一个知识点来做巩固。下面将按照由易到难的顺序来依次解决这些题目,当然有一些题目也可以用贪心等思想去做,但是由于本文着重讲解动态规划算法,所以涉及到其它的算法暂不作讨论。 2 实战

chuangshangbeidong的博客 894

代码训练LeetCode(6)编辑距离

这种表面一看,似乎是个字符串问题,但是如果按照分类匹配去做,怕是很难得出合理的方法。求两个字符串的编辑距离实际是个动态规划入门题目,动态规划算法是解决这个问题的标准方法。

梅花香自苦寒来,宝剑锋从磨砺出。 2803

动态规划求解编辑距离问题

题目描述:要求两字符串有差异的字符个数。例如: aaaaabaaaaa aaaaacaabaa 这两个字符串,最大公共字串长度是5,但它们只有两个字符不同,函数输出值应为2。 如果是: aaabbbcccddd aaaeeeddd 函数的输出值应该是6。 比较形象地形容一下,把两个字符串排成上下两行,每个字符串都可以在任何位置插入空格以便上下对齐,每个列上至少有一个字符来自这两个字符串。当对齐

yysdsyl的专栏 1万+

动态规划总结(二维数组)

记住,选择使用二维动态规划的关键在于能够将问题分解成子问题,并且子问题的解可以有效地用二维数组表示和访问。例如,A = {1, 3, 2, 4, 5},B = {3, 4, 1, 5, 2},LCIS 是 {3, 4, 5}。每次合并相邻的两堆石子,合并的代价是这两堆石子的总个数。问题描述: 在一个 m x n 的网格中,从左上角 (0, 0) 到右下角 (m-1, n-1) 的路径数量,只能向下或向右移动。问题描述:给定一个 m x n 的矩阵,找到一个子矩阵,使得该子矩阵中所有元素之和最大。

weixin_49342084的博客 870

Java算法精讲:编辑距离与动态规划难题

摘要:编辑距离是计算两个字符串间转换所需最少操作次数的经典动态规划问题。通过定义dp[i][j]表示将word1前i个字符转换为word2前j个字符的最小操作数,考虑字符匹配时的直接继承(dp[i-1][j-1])或不匹配时的三种操作(替换、删除、插入)的最小值加1。初始化边界条件为单边转换时的纯删除/插入次数。该算法在拼写检查、DNA分析等场景有广泛应用,时间/空间复杂度均为O(mn)。核心在于构建状态转移方程并正确处理边界条件。

红目香薰 697

动态规划-线性DP:从最长递增子序列到编辑距离

线性DP是动态规划中最常见的类型。从简单的最长递增子序列,到复杂的编辑距离,都是线性DP的经典应用。我并没有能力让你看完就精通所有DP,我只是想让你理解线性DP的状态定义和转移方程推导。从O(n²)到O(nlogn)的优化,从一维DP到二维DP,一步步建立线性DP的解题思维。从"最长递增子序列暴力超时"问题出发,剖析线性DP的核心思想与优化策略。通过DP数组的状态定义、二分优化的巧妙思路、以及编辑距离的完整推导,揭秘如何把LIS从O(n²)优化到O(nlogn)、编辑距离的三种操作如何转换成状态转移方程。

比较是偷走幸福的小偷 3975
上一篇: 二维动态规划----4.最长公共子序列
下一篇: 技巧----1.只出现一次的数字
码破苍穹ovo
博客等级 码龄2年 377粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值