代码随想录算法训练营day59 || 583. 两个字符串的删除操作,72. 编辑距离

动态规划之子序列,还是为了编辑距离做铺垫 | LeetCode:583.两个字符串的删除操作_哔哩哔哩_bilibili 动态规划终极绝杀! LeetCode:72.编辑距离_哔哩哔哩_bilibili

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

思路:返回使得s与t相同所需要删除的字符数,这道题初始的处理思想就是转换为求s与t的共同子序列的长度,然后返回  s的长度-共同子序列的长度+t的长度-共同子序列的长度  即可。

// 时间复杂度O(n^2)
// 空间复杂度O(n^2)class Solution {public int minDistance(String word1, String word2) {// 使得word1相同,那么说明就是找两个字符串中的非连续最长公共序列// 并且是两个字符串内的元素都可以删除,与以往在s中找t的递推方程不同// 在s中找t是s中必定存在t,且存在若干t内的元素的重复项,且只可以删除s中的元素,因此我们递推时,dp[i][j]需要考虑与t中每一个元素重复的可能// 但是仅仅是比较两个字符串中的元素交集,那么每个元素之间的匹配其实应该是唯一的,即s中只会存在一个t,这点在题目中其实是隐晦的,是在经历过s找t才形成的int n = word1.length();int m = word2.length();char[] s1 = word1.toCharArray();char[] s2 = word2.toCharArray();int[][] dp = new int[n+1][m+1];// 默认dp[0][0]就是零for(int i=1; i<=n; i++){for(int j=1; j<=m; j++){if(s1[i-1] == s2[j-1])dp[i][j] = dp[i-1][j-1]+1;elsedp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]);}}return (n-dp[n][m])+(m-dp[n][m]);}
}

72. 编辑距离

思路:注意理解编辑距离所求解的是使得s与t成为相同字符串所进行的操作次数,删除s的字符,删除t的字符,替换s和t的字符都属于操作了一次。而dp[i][j]与题目意思保持一致,所具备的含义就是s的i位置前与t的j位置前的字符串称为相同字串需要编辑多少次。所以不管是dp[i-1][j],dp[i][j-1],dp[i-1][j-1]都是属于对s或者t进行了一次编辑。

其次对于序列题目,暴力的思路都是两个字符串内字符一一比较,所以字符串题目的关键就是两个任意位置的字符进行比较。所以在字符题,用动态规划求解的话,发生转移的条件就是判断s[i]与t[j]的相等或不相等。

本题dp[i-1][j],dp[i][j-1]都是删除操作,dp[i-1][j-1]与dp[i][j]而言是替换操作;因为这个替换体现在dp[i][j]会得到dp[i-1][j-1]+1,即我默认通过替换一个元素使得s[i]与t[j]相等了,那么自然转移到的前一状态就是dp[i-1][j-1]。其次对于增加操作,可以等效于在另一者上执行删除,这点需要多理解,我存在的疑惑就是如果可以采用删除来替换增加的话,那么是否会影响之后的元素的判断。

// 时间复杂度O(n^2)
// 空间复杂度O(n^2)class Solution {public int minDistance(String word1, String word2) {int n = word1.length();int m = word2.length();char[] w1 = word1.toCharArray();char[] w2 = word2.toCharArray();int[][] dp = new int[n+1][m+1];// 初始化,初始化是针对一方是空串,因此所进行的操作是删除,赋值的内容就是删除的元素for(int i=0; i<=n; i++)dp[i][0] = i;for(int j=0; j<=m; j++)dp[0][j] = j;for(int i=1; i<=n; i++){for(int j=1; j<=m; j++){if(w1[i-1] == w2[j-1])dp[i][j] = dp[i-1][j-1];    // w1与w2中出现相同的元素,则无需进行处理if(w1[i-1] != w2[j-1])dp[i][j] = Math.min(Math.min(dp[i-1][j-1], dp[i-1][j]), dp[i][j-1])+1;      // dp[i-1][j]是删除  dp[i][j-1]是增加,相当于重新遍历当前j的位置,所以加1}}return dp[n][m];}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/704610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s中基于alpine-3.7.0的pod无法解析域名问题

现象 在pod内无法解析指定域名 # 执行ping bash-4.4# ping xx-xx-svc-0.xxx-fcp.svc.cluster.local ping: bad address xx-xx-svc-0.xxx-fcp.svc.cluster.local排查经过 # 执行nslookup bash-4.4# nslookup xx-xx-svc-0.xxx-fcp.svc.cluster.local Server: 172.43.0…

27.HarmonyOS App(JAVA)可复用列表项的ListContainer

可复用列表项的ListContainer 简短的列表可以通过定向布局实现,但是如果列表项非常多,则使用定向布局就不再合适。如需要创建50个列表项的列表,那么用定向布局实现至少需要创建50个以上的组件了。然而,限于设备屏幕大小的限制,绝大多数组件不会显示在屏幕上,却会占据大量的内存…

C#使用QQ邮箱发送邮件

简介 在c#中发送邮箱我们只需要引入官方提供的命名空间 System.Net.Mail &#xff0c;这个命名空间包含了一系列类&#xff0c;用于创建、配置和发送电子邮件消息。 这个命名空间中的一些主要类包括&#xff1a; MailMessage&#xff1a;表示一个电子邮件消息&#xff0c;包…

计网自顶向下:网络应用层【Web应用与HTTP协议】

目录 Web应用Web页URLWorld Wide Web 超文本传输协议——HTTP超文本C/S结构报文请求报文响应报文HTTP响应状态码try&#xff1a;在命令行里手工给web服务器发送请求 http连接的两种类型非持久&#xff08;http1.0&#xff09;持久&#xff08;http1.1&#xff09;▷ 流水线▷ 非…

重新安装VSCode后,按住Ctrl(or Command) 点击鼠标左键不跳转问题

重新安装VSCode后&#xff0c;按住Ctrl&#xff08;or Command&#xff09; 点击鼠标左键不跳转问题 原因&#xff1a;重新安装一般是因为相应编程语言的插件被删除了或还没有下载。 本次是由于Python相关的插件被删除了&#xff0c;因此导致Python无法跳转。 解决办法 在vs…

告别枯燥代码,Matplotlib学习网站让图表活起来!

介绍&#xff1a;Matplotlib是一个广泛使用的Python绘图库&#xff0c;专门用于创建高质量的2D图形。 Matplotlib的特点包括&#xff1a; 丰富的图表类型&#xff1a;支持多种图表类型&#xff0c;如线图、散点图、柱状图、直方图等&#xff0c;满足不同的数据可视化需求。 高度…

MySQL数据库进阶第五篇(锁)

文章目录 一、锁的概述二、全局锁三、表级锁四、元数据锁&#xff08;meta data lock, MDL&#xff09;五、意向锁六、行级锁七、行锁&#xff08;Record Lock&#xff09;八、间隙锁&#xff08;Gap Lock&#xff09;九、临键锁&#xff08;Next-Key Lock&#xff09;十、锁总…

beego代理前端web的bug

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、beego代理前端web的bug总结 一、beego代理前端web的bug *报错&#xff0c;为web压缩包index.html里面的注释被错误解析&#xff0c;删掉就行 2024/02/22 10:2…

低代码开发:数字赋能智能制造的未来

随着数字化转型的深入推进&#xff0c;智能制造已经成为我国制造业发展的重要方向。在这个过程中&#xff0c;低代码开发作为一种高效、便捷的编程方式&#xff0c;正逐渐成为企业数字化转型的得力助手。本文将探讨低代码开发在智能制造领域的应用及价值。 智能制造的挑战 随着…

C++面试基础 -操作系统-架构能力:如何高效利用CPU缓存

目录 局部性原理(Locality Principle) 数据结构的布局 缓存友好的算法 缓存大小和关联性 避免随机访问 使用缓存友好的数据结构 总结 高效利用CPU缓存是编写高性能C代码的关键之一。以下是一些在面试中可能会讨论到的方法。 局部性原理(Locality Principle) 时间局部性…

【C++】类和对象(2)

目录 1. 初始化列表 2.explicit关键字 3. Static成员 3. 友元 3.1友元函数 3.2友元类 4. 内部类 5.匿名对象 1. 初始化列表 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值&#xff0c;但是这个过程并不能称为对对…

3,设备无关位图显示

建立了一个类Dib Dib.h #pragma once #include “afx.h” class CDib :public CObject { public: CDib(); ~CDib(); char* GetFileName(); BOOL IsValid(); DWORD GetSize(); UINT GetWidth(); UINT GetHeight(); UINT GetNumberOfColors(); RGBQUAD* GetRGB(); BYTE* GetDat…

flutter sliver 多种滚动组合开发指南

flutter sliver 多种滚动组合开发指南 视频 https://youtu.be/4mho1kZ_YQU https://www.bilibili.com/video/BV1WW4y1d7ZC/ 前言 有不少同学工作中遇到需要把几个不同滚动行为组件&#xff08;顶部 appBar、内容固定块、tabBar 切换、tabBarView视图、自适应高度、横向滚动&a…

Linux开发:pam6 check_user示例

linux-pam里提供了一个简单的pam应用示例:check_user #include <security/pam_appl.h> #include <security/pam_misc.h> #include <stdio.h>static struct pam_conv conv = {misc_conv,NULL };int main(int argc, char *argv[]) {pam_handle_t *pamh=NULL;…

软硬协同设计下的飞天盘古,是如何降低存储系统开销的?

云布道师 经过十几年的技术演进&#xff0c;阿里巴巴已经实现了统一存储的目标——即以“飞天盘古”系统作为统一底座&#xff0c;通过标准化、服务化和开放化的方式建立了完整的存储产品和服务体系&#xff0c;服务广大内部和外部客户。 “万古乾坤心上辟&#xff0c;于令日…

正大国际:董宇辉最治愈的六句话

关于努力 努力不是为了证明自己多优秀&#xff0c; 而是在意外和不可控的因素来临时&#xff0c; 那些平常所努力积淀的涵养和能力&#xff0c; 可以成为抗衡一切风雨的底气。 关于焦虑 焦虑是对的。 焦虑是因为你想做得更好&#xff0c; 说明你追求高&#xff0c; 说明你眼界…

基于51单片机的智能监护与健康检测[proteus仿真]

基于51单片机的自行车测速系统设计[proteus仿真] 个人健康检测系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个基于51单片机的智能监护与健康检测 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xff…

LeetCode 2356.每位教师所教授的科目种类的数量

表: Teacher ----------------- | Column Name | Type | ----------------- | teacher_id | int | | subject_id | int | | dept_id | int | ----------------- 在 SQL 中&#xff0c;(subject_id, dept_id) 是该表的主键。 该表中的每一行都表示带有 teacher_id 的教师在系 d…

学习总结23

# [NOIP2002 普及组] 选数 ## 题目描述 已知 n 个整数 x1,x2,……,xn&#xff0c;以及 1 个整数 k&#xff08;k<n&#xff09;。从 n 个整数中任选 k 个整数相加&#xff0c;可分别得到一系列的和。例如当 n4&#xff0c;k3&#xff0c;4 个整数分别为 3,7,12,19 时&…

CrossOver24破解版下载安装与激活

在 Mac 上运行Windows 软件&#xff0c;CrossOver Mac 可以轻松地从 Dock 本地启动 Windows 应用程序&#xff0c;并将 Mac 操作系统功能&#xff08;如跨平台复制和粘贴以及共享文件系统&#xff09;集成到您的 Windows 程序中。 CrossOver 产品特性 无需重启 CrossOver 可以…