【重点】【DP】72.编辑距离

代码随想录算法训练营Day44 | 115.不同的子序列、583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结篇 阅读详情

题目

Python

核心理解:
解释下为什么dp[i-1,j]到dp[i,j]是对应的删除操作,而dp[i,j-1]到dp[i,j]对应的是插入操作。

首先必须明确的是dp[i,j]表示的是: 源字符串前i个字符,变成和目标字符串前j个字符一模一样需要的编辑次数。

那么已知dp[i-1,j]=n,求dp[i,j],意思是:已知原字符串前i-1个字符通过n次编辑可以和目标字符串前j个字符一模一样。求求dp[i,j]。

现在原字符串前进一位从i-1跑到i,这时要和目标字符串前j个字符一样,那么必须对跑到位置i的源字符串做一次删除操作,才能使得源字符串退回到i-i位置,这时他俩才能又一模一样

class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        m, n = len(word1), len(word2)
        dp = [[0]*(n+1) for _ in range(m+1)]
        for i in range(m+1):
            dp[i][0] = i
        for j in range(n+1):
            dp[0][j] = j
        for i in range(1, m+1):
            for j in range(1, n+1):
                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], dp[i][j-1], dp[i-1][j]]) + 1
        
        return dp[m][n]

Java

法1:DP

二维DP,自底向上,参见《算法小抄》中的解释,更容易理解!!!

class Solution {
    public int minDistance(String word1, String word2) {
        int m = word1.length() + 1, n = word2.length() + 1; // 加1是兼容空串
        int[][] dp = new int[m][n];
        for (int i = 1; i < n; ++i) {
            dp[0][i] = i;
        }
        for (int i = 1; i < m; ++i) {
            dp[i][0] = i;
        }
        for (int i = 1; i < m; ++i) {
            for (int j = 1; j < n; ++j) {
                if (word1.charAt(i - 1) == word2.charAt(j - 1)) {
                    dp[i][j] = dp[i - 1][j - 1];
                } else {
                    dp[i][j] = Math.min(dp[i - 1][j - 1], Math.min(dp[i][j - 1], dp[i - 1][j])) + 1;
                }
            }
        }

        return dp[m - 1][n - 1];
    }
}
广告推荐算法 - 学习笔记(持续更新中) 本篇博客,是我用来记录学习广告推荐算法的一些笔记和总结。王喆:"深度"学习计算广告计算广告系统的核心目标是通过数据、算法和技术,在合适的场景下,将最相关的广告精准推送给目标用户,同时实现广告主媒体平台和用户之间的多方利益最大化。广告主:需求方核心目标:通过精准投放广告,最大化转化(如点击、购买)并控制成本,提升投资回报率(ROI)。关键行为:广告创建,定向设置,预算与出价策略,效果监控媒体平台:供给方核心目标:最大化广告收入,同时保持用户体验以避免用户流失。 阅读详情

相关推荐

Homebrew高效升级与国内镜像源配置全攻略

本文详细介绍了如何通过配置国内镜像源(如清华、中科大、阿里云)来高效升级Homebrew,解决国内开发者访问GitHub仓库速度慢的问题。文章提供了从基础配置到永久生效的完整教程,包括常见问题解决和进阶技巧,帮助开发者大幅提升软件包管理效率。

weixin_28835551的博客 416

最短编辑距离(线性DP)

目录前言题目描述C++代码 前言 编辑距离算法被数据科学家广泛应用,是用作机器翻译和语音识别评价标准的基本算法。而不仅仅是为解题而生。 题目描述 给定两个字符串 AAA 和 BBB,现在要将 AAA 经过若干操作变为 BBB,可进行的操作有: 删除–将字符串 AAA 中的某个字符删除。 插入-在字符串 AAA 的某个位置插入某个字符。 替换–将字符串 AAA 中的某个字符替换为另一个字符。 现在请你求出,将 AAA 变为 BBB 至少需要进行多少次操作。 输入格式 第一行包含整数 n,表示字符串

weixin_53024141的博客 758

Chroma向量数据库实战:用Python快速搭建本地知识库(附中文诗词检索案例)

本文详细介绍了如何使用Chroma向量数据库和Python快速搭建本地知识库,并附有中文诗词检索的实战案例。通过解析核心概念、数据准备、向量化及智能检索实现,展示了Chroma在处理中文语义搜索时的轻量级与易用性,为开发者构建AI应用原型提供了实用指南。

weixin_29221753的博客 479

【算法】最长公共子序列&编辑距离(两个序列之间的DP)

这两道题目的类似点在于都是比较两个序列之间的内容,这种情况下通常定义 dp 数组为:dp[m + 1][n + 1] (之所以 + 1 是为了方式遍历的过程中出现负数下标)与之对应,遍历元素的时候,使用的下标分别是 i - 1 和 j - 1。(因为原始数据的数据范围还是 0 ~ m 和 0~ n)由于无后效性,即 dp[i][j] 的数值只与和它接近的几个数字有关,因此可以优化 dp 数组的空间。

小威的博客 863

COLMAP性能优化实战:如何用GPU加速和并行计算让重建速度提升300%

本文详细介绍了如何通过GPU加速、并行计算和参数调优显著提升COLMAP的三维重建效率。从硬件资源分配到计算流程优化,再到大型数据集的分块处理策略,全面解析了将重建速度提升300%以上的实用技巧,特别适合处理无人机航拍和室内扫描等大规模三维重建项目。

weixin_29098391的博客 202

别再只设接触压力了!用ANSYS Workbench模拟O型圈密封泄漏的完整流程

本文详细介绍了在ANSYS Workbench中模拟O型圈密封泄漏的完整流程,重点解析了流体渗透压力载荷的设置与应用。通过双物理场耦合模型和精确的参数配置,帮助工程师准确评估密封性能,避免传统方法仅考虑接触压力的局限性。文章还提供了常见问题的解决方案和工程实践建议,提升密封设计的可靠性。

weixin_30372371的博客 399

编辑距离 (dp)

编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 例如将kitten一字转成sitting: sitten (k->s) sittin (e->i) sitting (->g) 所以kitten和sitting的编辑距离是3。俄

J____xueming的博客 456

FPGA设计-Vivado的Off-Chip Termination设置问题

经常遇到在FPGA设计时,很多人很迷惑这些关于硬件的终端匹配怎么设置,Vivado的Off-Chip Termination设置问题,这里就详细说一下这个问题。

whm128的博客 2723

字符串的编辑距离(DP数组)

给定一个原始字符串S1和一个目标字符串S2,将S1到S2的编辑距离定义为S1编辑操作成S2所需的最小编辑次数。1.增加:在串s1上增加一个数据变为串s2,也就是说在在串2上删除一个元素故 dp[i][j] = dp[i][j-1]3.修改:将串1上的一个元素进行修改,也就是替换的过程,故dp[i][j] = dp[i-1][j-1] + 1;2.删除:在串1上删除一个数据变为串2,故dp[i][j] = dp[i-1][j]由串s1变为串s2的过程也可以理解为由串s2变为串s1的过程。

欢迎访问我的个人Blog网站:blog.homeryland.org 528

[从零开始学习FPGA编程-18]:快速入门篇 - 操作步骤2-6- VerilogHDL时序电路语法分析(以计数器为例)

目录前言:第1章 功能模块代码:counter.v第2章 驱动代码:tcounter.v前文以及阐述了VerilogHDL基本语法,本文将以modelsim自带的计数器程序来解读VerilogHDL的语法。代码路径:

文火冰糖(王文兵)的博客 7万+

使用 WSL 在 Windows 上安装 Linux

开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。通过适用于 Linux 的 Windows 子系统 (WSL),开发人员可以安装 Linux 发行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等),并直接在 Windows 上使用 Linux 应用程序、实用程序和 Bash 命令行工具,不用进行任何修改,也无需承担传统虚拟机或双启动设置的费用。

隔壁老瓦的专栏 2872

编辑距离(dp)

定义 编辑距离又称Leveinshtein距离,是由俄罗斯科学家Vladimir Levenshtein在1965年提出。编辑距离是计算两个文本相似度的算法之一,以字符串为例,字符串a和字符串b的编辑距离是将a转换成b的最小操作次数,这里的操作包括三种: 插入一个字符 删除一个字符 替换一个字符 举个例子,kitten和sitting的编辑距离是3,kitten -> sitten(k替换为...

WAWA战士的博客 650

车载ECU底软测试:方法与技术的深度解析

底软是运行在 ECU 硬件平台上的基础软件,它为上层应用程序提供了硬件驱动、操作系统服务、通信协议栈等功能。底软的主要功能包括:硬件驱动:负责与 ECU 的各种硬件外设进行通信和控制,如 GPIO、UART、SPI、CAN 等。操作系统服务:提供任务调度、内存管理、中断处理等功能,确保系统的实时性和稳定性。通信协议栈:实现 ECU 与其他 ECU 或外部设备之间的通信,如 CAN、LIN、FlexRay 等。诊断服务:负责对 ECU 的故障进行诊断和处理,并将故障信息存储在故障码存储器中。

天赐好车的博客 1423

leetcode 72 编辑距离

编辑距离首先是对称的,一个字符串增加字符相当于另一个字符串减少字符,相应的,改也是一个对称操作。 如果对应位置的字符相同,可直接领dp[i][j] = dp[i-1][j-1],因为肯定能少一次。 此题和最长公共子序列很像。最长公共子序列也是看前三个元素,但是这个要三个一起比较,LCS是没必要看左上角的元素。 class Solution { public: int minDistance(string word1, string word2) { int m = word1.siz

qq_39678022的博客 128

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

关于动态规划【力扣72.编辑距离的思考】

本文总结了力扣动态规划中子序列问题的分类与联系,重点分析了编辑距离(72题)的解题思路。子序列问题可分为单数组(连续/非连续)和双数组(连续/非连续)两类,其中1143题(最长公共子序列)是多个问题的基础模型。编辑距离问题综合了增删改操作,其核心在于递推公式:当字符相同时继承前一状态;不同时取三种操作(删除、插入、替换)中的最小值加1。该问题通过二维DP数组记录状态转移,时间复杂度O(mn),是典型序列比对问题的动态规划解法。

wasb666的博客 226

VB摄像头监控

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

代码随想录算法训练营第59天 | 583.两个字符串的删除操作 + 72.编辑距离 + 编辑距离总结篇

题目链接:. - 力扣(LeetCode)思路:两个字符串都可以删除,dp[i][j]表示以 i-1 为结尾的字符串word1 和以 j-1 位结尾的字符串word2想要达到相等所需要删除元素的最少次数 题目链接:力扣-72. 编辑距离思路: 编辑距离是用动规来解决的经典题目;dp[i][j] 表示以下标 i-1 为结尾的字符串word1,和以下标 j-1 为结尾的字符串word2,最小编辑距离 编辑距离问题总结:代码随想录

weixin_52443257的博客 633

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

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

LeetCode[72] 编辑距离

【代码】LeetCode[72] 编辑距离。

qq_45972928的博客 254

LeetCode 72 编辑距离(二维DP || 一维空间优化)

dp[i][j]:将word1的前i个字符转换成word2的前j个字符所需的最少操作数。核心逻辑:编辑距离的最优解是动态规划,状态转移的核心是「字符相等直接继承状态,不等则取三种操作的最小成本+1」。二维 vs 一维二维版是基础,逻辑直观,适合新手理解核心;一维版是空间优化,通过prev缓存上一轮左上角状态,避免数组覆盖,空间复杂度更低。性能对比:两者时间复杂度均为O(m*n)(必须遍历所有字符组合),一维版空间复杂度从O(m*n)优化到,工程中更推荐使用。

Linzik的博客 355

[LeetCode] 72、编辑距离

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

aift的专栏 218

Leetcode 72.编辑距离

1、边界条件需要限定到:j+1 or : i+1。

普通攻击往后拉的博客 484

二刷hot100-72.编辑距离

和上一道感觉一模一样,状态方程需要根据题意改变,增,删,改三种情况是如何;元素相等不需要操作是如何,核心还是状态转移方程,dp数组定义和上一道几乎一模一样。

2302_78497251的博客 29

动态规划Day39:吃透不同的子序列与编辑距离,掌握二维DP核心

动态规划是解决字符串匹配与序列比较问题的核心算法思想,尤其在处理子序列、编辑距离等经典场景时,二维DP模型是必须掌握的基础工具。其原理在于通过定义dp数组的状态含义,利用递推公式描述状态转移过程,从而在不重不漏地枚举所有可能的前提下求出最优解或方案数。技术价值体现在:它能将指数级暴力搜索优化为多项式时间求解,广泛应用于文本比对、基因序列分析、拼写纠错等真实工程场景。LeetCode中115.不同的子序列、583.两个字符串的删除操作、72.编辑距离正是这一模型的典型代表,它们从计数、删除到增删替换逐步递进,

weixin_31155097的博客 310

编辑距离题解

1. 使用动态规划请求,使用 dp[i][j] 来表示当前 word1 第 i 位置 和 word2 第 j 位置的最优解,由于计数是由从0计数,所以 dp[i][j] 表示的是 word1[i-1] 和 word2[j-1] 的位置。所以 dp 公式 为 min( dp[i-1][j] , dp[i][j-1] , dp[i-1][j-1] ) +1。+1 代表多做一次操作,dp[i-1][j] 代表 第一个情况,dp[i][j-1] 代表第二个情况。

lxh0113的博客 270

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

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

Alex__Mahone的专栏 960

代码随想录训练营第五十六天583. 两个字符串的删除操作72. 编辑距离

定义dp数组dp[i]为使word1[i-1]之前的数组完全转化为word[j]所需要的最小步数,此时初始化dp数组,dp[i][0]=i,dp[0][j]=j,最后就是可能出现的情况,倘若当前i-1元素与j-1元素相等,此时dp[i][j]=dp[i-1][j-1],若是不相等则有三种可能:需要增加:dp[i][j]=dp[i][j-1]+1;需要删除:dp[i][j]=dp[i-1][j]+1;当相等时,dp[i][j]=dp[i-1][j-1](不用考虑这两个元素了);此外,在写出递推表格验证。

areyouapoem的博客 113

力扣72-编辑距离

obsidian给你两个单词word1和word2请返回将word1转换成word2所使用的最少操作数。3horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r')rose -> ros (删除 'e')5intention -> inention (删除 't')inention -> enention (将 'i' 替换为 'e')enention -> exention (将 'n' 替换为 'x')

Kevincxt的博客 169
上一篇: 【重点】【DP】1143.最长公共子序列|516.最长回文子序列
下一篇: 【重点】【背包】322.零钱兑换
Allenlzcoder
博客等级 码龄10年 925粉丝 512原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值