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

相关推荐

别再为Word转PDF表格变形发愁了!Aspose.Words for Java 19.5 保姆级避坑指南

本文详细介绍了使用Aspose.Words for Java 19.5解决Word转PDF时表格变形问题的完整方案。从格式转换原理到实战技巧,涵盖固定表格宽度、禁用自动调整、强制文本换行等核心方法,并提供高级场景应对策略和性能优化建议,帮助开发者高效处理复杂文档转换需求。

weixin_28702105的博客 266

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

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

Rock在学习的博客 523

OpenAI Realtime API实时语音交互实战指南

实时语音交互是人机自然对话的核心能力,其本质在于构建低延迟、双向、流式协同的音频-语义闭环。它突破传统REST API的请求-响应范式,依托WebSocket实现毫秒级音频输入流(audio.delta)、模型生成流(text/audio.delta)与动态控制流(session.update)三重并行。该技术显著降低端到端延迟至300ms以内,支撑语音助手、智能客服、对话式教育等强实时场景。本文聚焦OpenAI Realtime API的工程落地,详解PCM音频流处理、VAD语音活动检测、AudioCon

weixin_32285357的博客 393

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

跟着Cell学单细胞转录组分析(五):单细胞转录组marker基因鉴定及细胞群注释

书接上回(跟着Cell学单细胞转录组分析(四):单细胞转录组测序UMAP降维聚类)。完成数据降维和细胞聚类后,最主要的环节和工作就是确定各个细胞群,明确是什么类型的细胞,正群的细胞定群很关键,涉及到整个研究,所以这一步宁愿多费时间,也不要出错。当然,这也不是一蹴而就的,需要反复的确认。 要确定各个群是什么细胞,首先需要了解细胞群的marker基因,因为不同类型的细胞突出 表达的基因也是不同的。这里使用FindAllMarkers鉴定各个细胞群的高表达基因。 DefaultAssay(scedata)

qq_42090739的博客 1万+

在overleaf中使用bibtex引用参考文献

最近在挑选写tex的平台,挑来挑去,个人感觉overleaf给我带来的体验感是最舒适的。不过由于对内部的文件组织和make进行了一层封装,所以与一般的本地平台编译tex会有一点不同。此处写一下在overleaf中使用bibtex的方法。 在tex中使用bibtex引用文献是一件很舒适的事,毕竟这是tex的优点之一(要是tex比word难用,我干什么不去用word,hhh) 第一步,我们创建一个.bib文件,名字随便起,我这边起为reference.bib。 然后打开谷歌学术,搜索你想要引用的文章,并找到

锦恢的博客 4万+

[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

(二)目标检测之 HOG+SVM 算法

文章目录一、概述二、方法概述三、积分图四、AdaBoost五、级联检测六、结果七、复现八、总结参考资料 一、概述   梯度直方图HOG(Histogram of Oriented Gradients)是法国人Dalal在2005年CVPR会议上提出的特征提取算法,并将其与 SVM 配合,用于行人检测。论文地址:Histograms of oriented gradients for human detection HOG有个优点,提取的边缘和梯度特征能很好的抓住局部形状的特点,且因是对图像做了Gamma

天青如水的博客 1万+

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

保姆级教程:手把手教你从NASA Earthdata免费下载ASTER L2地表温度数据(附shp文件拖拽技巧)

本文提供了一份详细的ASTER L2地表温度数据下载指南,涵盖从NASA Earthdata注册、数据定位到shp文件拖拽技巧的全流程。特别针对新手常见问题如邮箱选择、密码设置、云量筛选等给出实用解决方案,帮助用户高效获取遥感数据并避免常见陷阱。

weixin_42662605的博客 424

计组实验5:cache大小测量与 cache line 大小测量

前言 今天做了实验5,通过 c 语言测 cache 参数。其实按理来说挺简单的,只是我们班没给代码,纯靠自己。听说别的班有给代码 emm 因为《深入理解计算机系统》这本书上面给的代码是 Linux 平台下的,而且需要一个 fcyc2 头文件,可以在 https://github.com/fabiensanglard/CpuCacheMountainViewer 这里找到。 ⚠ 我没有在 Linux 下试过课本上面的代码。。。 我是在 win10 下测试的。。。 所以 。。。 我并不确定我的代码是否正确。

AKGWSB 's blog 1万+

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

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

linping_的博客 284

GD32主程序跑飞?可能是BOOT0引脚惹的祸(附J-LINK调试实录)

本文针对GD32微控制器程序下载后无法运行的典型问题,深入剖析了BOOT0引脚配置对启动模式的关键影响。通过结合J-LINK调试器与KEIL MDK环境,详细演示了如何从程序跑飞现象(如PC指向0x1FFF Fxxx)定位到硬件层面的BOOT0引脚与VDD短路故障,并提供了系统的硬件排查步骤与设计预防建议。

d6e7f8的博客 704

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

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

KKKKKKyle的博客 260

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

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

晴雪月乔的博客 560

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

余额充值