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.两个字符串的删除操作·动态规划 动态规划 阅读详情

相关推荐

Power BI财销一体分析——KPI分析应用实践

第九步:插入三个散点图,行拖入分销商表分销商字段,将度量值中的销量拖入X轴,将利润拖入Y轴,大小拖入度量值总销售额,将分销商表业务类型字段作为筛选条件添加给散点图,分别选择专业自行车店、增值经销商、仓库,使视觉对象固定显示不同业务类型的散点分布。这个公式其实是不需要我们自己写的,依赖于快度量值功能星级评分,基值选择度量值总销售额,星数选择5,最低星值评分选择0,最高星级评分值选择100,点击添加,星级评分度量值就建立好了,接下来我们理解一下公式。好的,今天的讲解就到这里。

BI瓶子的博客 1553

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

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

Rock在学习的博客 523

C++跨平台Word文档处理库DuckX实战指南:从原理到项目集成

在C++开发中,处理Office文档,尤其是Word文件,常因缺乏原生易用的库而面临挑战。Office Open XML(OOXML)作为.docx文件的基础标准,其本质是包含XML文件的ZIP压缩包。理解这一原理,开发者便能通过解析和操作XML来实现文档的读写。DuckX库正是基于此,为C++提供了轻量级的解决方案。它封装了底层的ZIP处理和XML解析,提供了简洁的面向对象API,其技术价值在于实现了跨平台、无外部依赖的Word文档自动化生成与处理。这尤其适用于服务器端、嵌入式环境或需要脱离Office软

weixin_33508411的博客 387

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

基于STM32的多路火灾报警系统设计

本文设计了一款基于STM32的多路火灾报警系统,利用多个传感器组合(如烟雾传感器、温度传感器等)进行数据采集与处理,精确判断火灾情况,并及时发出报警信号,保障生命与财产安全。本系统设计了一款基于STM32的多路火灾报警系统,通过结合烟雾传感器和温度传感器,提升了火灾检测的准确性和可靠性。未来,系统可以进一步集成更多传感器,如气体传感器、湿度传感器等,进一步提升火灾报警系统的智能化水平。本系统采用STM32F103单片机作为核心处理单元,结合烟雾传感器、温度传感器和报警模块,实现多通道火灾报警功能。

stm32d1219的博客 2030

免费升级哨兵2号分辨率!用SRCNN深度学习模型实现10米→2.5米超分重建

本文详细介绍了如何利用SRCNN深度学习模型,将哨兵2号遥感影像的分辨率从10米免费提升至2.5米。文章提供了从数据准备、模型训练到部署应用的全流程实战指南,旨在通过AI应用技术,为农业监测、城市规划等领域提供更高精度的影像数据支持。

coffee的博客 524

[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

【Python实战解析】从数据爬取到房价预测:一个完整的数据科学项目流程拆解

本文详细拆解了一个完整的Python数据科学项目流程,从爬取长沙二手房数据到房价预测模型构建。通过实战案例,介绍了数据爬取、清洗、可视化及模型优化的关键技巧,帮助开发者掌握Python在数据分析中的应用,提升程序开发能力。

weixin_30379531的博客 412

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万+

zemax双透镜公差分析

蒙特卡罗分析: 评估公差的整体影响,模拟过程中产生一系列随机的lens,满足指定的公差,然后再按照标准评估。公差分析,就是在设计了一个理想的系统后,想看看实际生产过程中如果产生公差(误差),系统会坏到什么程度,也就是光学性能受到多大影响。反灵敏度分析:分别对每个公差在性能方面的一个给定的最小允许减少量来计算公差,也就是限制了系统性能的变化,和灵敏度分析方向相反。灵敏度分析对每个公差单独求值,分别计算每个公差操作数的最大、最小、标准值(如上图)所有设计上可能的公差都列出来了。注意要固定透镜的口径。

fendoudecheng的博客 3207

用迅为RK3588开发板DIY无人机飞控:从电路设计到PID调参全记录

本文详细记录了使用迅为RK3588开发板DIY无人机飞控的全过程,从硬件选型、PCB设计到实时系统构建和PID调参。RK3588核心板凭借其强大的AI算力和丰富接口,成为高性能无人机控制解决方案的理想选择。文章还分享了视觉导航系统集成和实际飞行测试经验,为硬件爱好者提供实用参考。

weixin_29053577的博客 434

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

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

linping_的博客 284

Buck电源设计常见的一些问题(一)半桥栅极驱动芯片共性失效问题

半桥驱动芯片主要用在器件可应用于电信,数据通信,便携式存储或更低电压系统中的电源转换器,半桥、全桥、推挽、同步降压,正激变换器和同步整流器等方面。当然难免会遇到不少问题。基本上我们在产品开发的过程中都遇到过栅极驱动芯片坏掉的情况,所以找了一些资料,学习学习。也查找查找原因。

小幽余生不加糖 2369

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

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

KKKKKKyle的博客 260

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

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

晴雪月乔的博客 560

算法学习——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、付费专栏及课程。

余额充值