LeetCode重点题系列之【583. Delete Operation for Two Strings】

LeetCode算法题解(动态规划)|LeetCode583. 两个字符串的删除操作、LeetCode72. 编辑距离 这两道题比较类似,只要会其中一道题,两外一个也很容易想出来步骤。 阅读详情

Given two words word1 and word2, find the minimum number of steps required to make word1 and word2 the same, where in each step you can delete one character in either string.

Example 1:

Input: "sea", "eat"
Output: 2
Explanation: You need one step to make "sea" to "ea" and another step to make "eat" to "ea".

这题有点东西,可以用两种方法做。

第一种类似edit distance。

初始化第一行第一列还是 0,1,2,3,4。。。。

if word1[i-1]==word2[j-1],那么mem[i][j]=mem[i-1][j-1]

 然后取mem[i-1][j]+2,mem[i][j-1]+1,还有mem[i-1][j-1]+1最小值。

class Solution(object):
    def minDistance(self, word1, word2):
        """
        :type word1: str
        :type word2: str
        :rtype: int
        """
        # Method one, 直接dp,参考edit distance的方法
        mem=[[0 for _ in range(len(word1)+1)] for _ in range(len(word2)+1)]
        for i in range(len(mem)):
            mem[i][0]=i
        for j in range(len(mem[0])):
            mem[0][j]=j
        for i in range(1,len(mem)):
            for j in range(1,len(mem[0])):
                if word2[i-1]==word1[j-1]:
                    mem[i][j]=mem[i-1][j-1]
                else:
                    mem[i][j]=min(mem[i-1][j-1]+2,mem[i-1][j]+1,mem[i][j-1]+1)
        return mem[-1][-1]

第二种方法是,most common subsequence,

还是dp,

初始状态第一行,第一列都是0

if word1[i-1]==word2[j-1], then mem[i][j]=mem[i-1][j-1]

否则,mem[i][j]=max(mem[i-1][j],mem[i][j-1],mem[i][j])

最后返回mem[-1][-1]

class Solution(object):
    def minDistance(self, word1, word2):
        """
        :type word1: str
        :type word2: str
        :rtype: int
        """
        re=self.helper(word1,word2)
        return len(word1)-re+len(word2)-re
    
    
    
    def helper(self,word1,word2):
        mem=[[0 for _ in range(len(word2)+1)] for _ in range(len(word1)+1)]
        re=0
        for i in range(1,len(mem)):
            for j in range(1,len(mem[0])):
                if word1[i-1]==word2[j-1]:
                    mem[i][j]=mem[i-1][j-1]+1
                else:
                    mem[i][j]=max(mem[i-1][j],mem[i][j-1],mem[i-1][j-1])
                re=max(re,mem[i][j])
        return re

 

 

LeetCode·583.两个字符串的删除操作·动态规划 动态规划 阅读详情

相关推荐

从原理到代码:一文搞懂LFM信号脉冲压缩在Matlab中的实现

本文深入解析了LFM信号脉冲压缩的核心原理与Matlab实现方法。从线性调频信号的数学表达、时频特性入手,详细讲解了如何构建多目标回波仿真环境,并重点阐述了匹配滤波器的频域实现算法。文章提供了完整的、可运行的Matlab代码,涵盖信号生成、噪声添加、脉冲压缩及性能评估等关键步骤,并探讨了加窗处理、参数选择等工程实践中的考量,为雷达信号处理的学习与实践提供了清晰指南。

weixin_29063035的博客 415

583. 两个字符串的删除操作(中等)

给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。每步 可以删除任意一个字符串中的一个字符。解释: 第一步将 “sea” 变为 “ea” ,第二步将 "eat "变为 “ea”输入: word1 = “sea”, word2 = “eat”

Rock在学习的博客 523

Ubuntu+Dify实战:如何让大模型知识库完美支持图片召回(附避坑指南)

本文详细介绍了在Ubuntu系统上部署Dify平台,并实现大模型知识库图片召回功能的完整实战方案。通过解析Dify处理图片的底层逻辑,重点讲解了配置Nginx代理服务器将本地图片路径转换为可公开访问URL的核心工程步骤,并提供了文档预处理、环境变量配置以及父子分段策略等高级技巧,帮助开发者构建图文并茂的AI应用,有效提升知识库的丰富性和用户体验。

c7d8e的博客 445

java leetcode之[中等]583. 两个字符串的删除操作

题目的链接在这里:https://leetcode-cn.com/problems/delete-operation-for-two-strings/ 目录题目大意一、示意图二、解题思路动态规划 题目大意 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。 一、示意图 二、解题思路 动态规划 动态规划 代码如下: class Solution { public int minDistance(Strin

wzw的博客 1007

JetBrains Air:多Agent协同的IDE运行时架构解析

IDE智能编程正从单模型增强迈向多Agent协同范式。多Agent架构通过职责分离、上下文精简与运行时隔离,显著提升代码生成稳定性与合规性;其核心依赖轻量级嵌入式运行时(如ARL),支持AST级内存共享、eBPF安全拦截与毫秒级冷启动。该架构天然适配本地化部署、离线开发与高安全合规场景(如PCI-DSS、金融内网),并为Java/Python/TS等语言提供可扩展的规则驱动开发流水线。JetBrains Air正是这一技术路径的工程化落地代表。

weixin_30443075的博客 571

大数据国赛第2套任务C-子任务一特征工程

根据**Hudi**的dwd_ds_hudi库中相关表或MySQL中shtd_store中相关表(order_detail、sku_info),计算出与用户id为6708的用户所购买相同商品种类最多的前10位用户(只考虑他俩购买过多少种相同的商品,不考虑相同的商品买了多少次),将10位用户id进行输出,若与多个用户购买的商品种类相同,则输出结果按照用户id升序排序,输出格式如下,将结果截图粘贴至客户端桌面【Release任务C提交结果.docx】中对应的任务序号下;

weixin_44117248的博客 904

[LeetCode] 583. Delete Operation for Two Strings 两个字符串的删除操作

Given two wordsword1andword2, find the minimum number of steps required to makeword1andword2the same, where in each step you can delete one character in either string. Example 1: Input: "sea"...

weixin_30814329的博客 163

Unity布娃娃系统 Ragdoll Mecanim Mixer使用

6. 选完之后,左键下面的hip等角色各个部位不松开鼠标,拖拽连接到上面Amature的各个部位,如图,下面所有部位都连接完之后,第二步点击Configure Selected Bones确认你的部位连接选择。要做一个布娃娃和动画混合的项目,这个插件是比较不错的,搜了一圈文章教程也是抄来抄去,抄的没有头没有尾,自己摸索着用了一下,记录使用过程吧。8. 之后就点击步骤7图一中的Create Ragdoll,会发现player结构发生变化,如图。4. 添加完脚本之后会显示你的player结构,如图。

SuShengQuanshiW的博客 1650

leetcode 583. Delete Operation for Two Strings | 583. 两个字符串的删除操作(最长公共子序列,DP)

题目 https://leetcode.com/problems/delete-operation-for-two-strings/ 题解 本题实质上是个最长公共子序列问题,又是经典的 递归->傻缓存->dp 得到最长公共子序列的长度 common,最后,三种方法都统一返回 s1.length() + s2.length() - 2 * common; 即可。 class Solution { // 实质上是个最长公共子序列问题 public int minDistance(S

寒泉 4万+

YOLO创新点改进点的消融实验设计规范

YOLO改进的消融实验是一种重要的方法,用于评估和验证模型中不同组件的影响。在进行YOLO改进的消融实验时,我们可以选择一些可能的改进点,比如Backbone网络、Anchor框设计和损失函数设计,然后通过实验来分析它们对模型性能的影响。首先,我们需要确定实验设计。对于每个改进点,我们将设计多个实验组,并针对每个实验组训练模型并进行性能评估。这里以三个改进点为例进行说明:改进点1:Backbone网络 (改进点2:Anchor框设计 (改进点3:损失函数设计 (

crasher123的博客 2909

YOLO26改进策略【Neck】| 关键点检测:SDFM 表层细节融合模块,利用通道-空间注意力机制,实现深层与浅层特征融合,抑制噪声干扰

本文记录的是利用SDFM 模块改进 YOLO26 的颈部融合部分,专门用于关键点检测。SDFM模块(Surface Detail Fusion Module,表层细节融合模块) 通过在特征提取网络的浅层引入通道-空间注意力机制,动态生成深层与浅层特征融合权重。该模块可自适应保留不同模态中的独特信息,抑制背景噪声与光照干扰,实现低层细节的精准对齐与互补增强,为后续检测提供高保真度的底层特征表示,从而提升模型在复杂场景下的目标检测鲁棒性与定位准确性。Rethinking the necessity of ima

Limiiiing的博客 176

leetcode——第583题——两个字符串的删除(不连续)

题目: 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。 class Solution { /* 态规划五部曲: * 1、确定 dp 数组以及下标含义 * 题意是:找到使word1和word2相同所需的最下步数,每一步可以删除任意一个字符串中的一个字符。 * dp[i] [j] :以 i-1 结尾的 word1,和以 j-1 结尾的 word2,达到相同所走的最小步数,也就是删除元素的最少次数。 * 2、确

linping_的博客 284

SST专题(2-5)MMC-SST 输入级的环流抑制

本文研究了模块化多电平换流器(MMC)的数学模型及其环流抑制控制方法。首先建立了MMC等效电路模型,推导了桥臂电流方程和虚拟电动势表达式,提出通过控制桥臂电压修正量来调节内部电流而不影响外部特性。针对MMC特有的二倍频负序环流问题,设计了基于负序旋转坐标变换的环流抑制控制器(CCSC),将时变环流转换为直流量进行控制。通过比例-积分调节和电压前馈补偿,生成内部不平衡压降参考值,最终形成包含功率控制和环流抑制的整体控制结构。仿真结果表明该方法能有效抑制内部环流,同时保持系统稳定运行。

嵌入式老牛的博客 537

Day 56 | 583. Delete Operation for Two Strings | 72. Edit Distance

Day 56 | 583. Delete Operation for Two Strings | 72. Edit Distance

KKKKKKyle的博客 260

VB摄像头监控

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

NTscan扫描工具

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

leetcode583——Delete Operation for Two Strings

题目大意:给出两个字符串,如果每次可以删除一个字母,想使得他们最后完全相同,最少需要多少次删除 分析:动规。典型的LCS问题应用。答案就是两个字符串的长度之和减去两倍的LCS长度。           状态:dp[i][j]——以字符串1的下标i-1和字符串2的下标j-1结尾的最长公共子串长度           初始化:dp[i][0]=dp[0][j]=0           结果:d...

tzyshiwolaogongya的博客 331

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【LeetCode】583. 两个字符串的删除操作(中等)——代码随想录算法训练营Day55

【LeetCode】583. 两个字符串的删除操作

晴雪月乔的博客 560

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

算法学习——LeetCode力扣动态规划篇10(583. 两个字符串的删除操作、72. 编辑距离、647. 回文子串、516. 最长回文子序列)

算法学习——LeetCode力扣动态规划篇10(583. 两个字符串的删除操作、72. 编辑距离、647. 回文子串、516. 最长回文子序列)

拉依达不拉跨的博客 1110

【动态规划】LeetCode 583. 两个字符串的删除操作 Java

我的代码,错误代码,只考虑到了字母出现的次数,没有考虑到两个字符串中字母出现的顺序给定两个字符串word1和word2,分别删除若干字符之后使得两个字符串相同,则剩下的字符为两个字符串的公共子序列。为了使删除操作的次数少,剩下的字符应尽可能多。当剩下的字符为两个字符串的时,删除的操作的次数最少。因此,可以计算两个字符串的最长公共子序列的长度,然后分别计算两个字符串的长度和最长公共子序列的长度之差,即为两个字符串分别需要删除的字符数,两个字符串各自需要删除的字符数之和即为最少的删除操作的总次数。

guliguliguliguli的博客 461

leetCode 583.两个字符串的删除操作 动态规划 + 优化空间复杂度(二维dp、一维dp)

这个表格该怎么填呢,我们先按照左边的图标注好每个格子上面的字符串,然后依次手动计算该删除的字数,填入格子里。比如"se" 和 "e" ,要。嘻嘻,假设我们上文这些全都不会,那我们还想要知道递推式,还想用动态规划来解决此问题,那该怎么做呢?第一步将 "sea" 变为 "ea" ,第二步将 "eat "变为 "ea",这样保证dp[i][j]可以根据之前计算出来的数值进行计算。以此类推,我们就可以得到下面的两张图的第一张表格。,"se" 和 "eat" ,要。,"se" 和 "ea" ,要。

呵呵哒!的博客 637

leetcode:583. 两个字符串的删除操作

代码】leetcode:583. 两个字符串的删除操作。

OceanStar的博客 595

LeetCode 583. 两个字符串的删除操作(动态规划)

1. 题目 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。 示例: 输入: "sea", "eat" 输出: 2 解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea" 提示: 给定单词的长度不超过500。 给定单词中的字符只含有小写字母。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/delete-operation-for-two

Michael是个半路程序员 1427

LeetCode题练习与总结:两个字符串的删除操作--583

本文详细介绍了如何通过动态规划解决编辑距离问题,包括解题思路、代码实现、时间复杂度分析及知识点总结,为解决此类问题提供了清晰的指导。

一直学习永不止步 839

[leetcode]583. Delete Operation for Two Strings

[leetcode]583. Delete Operation for Two Strings Analysis 好冷鸭—— [每天刷题并不难0.0] Given two words word1 and word2, find the minimum number of steps required to make word1 and word2 the same, where in ea...

weixin_32135877的博客 105

583. Delete Operation for Two Strings (Medium) 最长公共子序列

公共子序列 public static int lengthOfLIS2(int[] nums1,int[] nums2) { int[][] dp=new int[nums1.length+1][nums2.length+1]; for(int i=1;i<=nums1.length;i++){ for(int j=1...

susuxuezhang的博客 154

动态规划 Leetcode 583 两个字符串的删除操作

else dp[i][j] = min(dp[i][j-1]+1, min(dp[i-1][j]+1,dp[i-1][j-1]+2) (删除word1[i-1],删除word2[j-1],或者同时删除)dp[i][j-1] = dp[i-1][j-1]+1所以可以简化为else dp[i][j] = min(dp[i][j-1]+1, dp[i-1][j]+1)2.递推公式:if(word1[i-1] == word2[j-1]) dp[i][j] = dp[i-1][j-1]

weixin_46930685的博客 288

LeetCode583. 两个字符串的删除操作

思路 1.定义dp数组 dp[i][j]是s以下标i-1和t下标为j-1结束的两个字符串删除最少dp[i][j]步相同。 注:这里i-1和j-1是为了初始化方便。 2.递推公式 如果s中下标为i-1的字符和t中以下标为j-1的字符相同,则dp[i][j] = dp[i-1][j-1]; 就是如果当前两个字符相等,则当前两个字符不用删除,就是将各自之前的删除为相同的即可。 如果不相等的话,就是要将当前两个字符中删去一个或者两个都删除后得到的子字符串相同的步数最少。 即: dp[i][j] =

ALi的博客 373
上一篇: LeetCode重点题系列之【28. Implement strStr()】
下一篇: LeetCode重点题系列之【32. Longest Valid Parentheses】
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值