day58--动态规划16

news2024/12/27 12:38:31
  •  583. 两个字符串的删除操作 
  •  72. 编辑距离 
  •  编辑距离总结篇 

第一题:两个字符串的删除操作

给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。

示例:

  • 输入: "sea", "eat"
  • 输出: 2
  • 解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"

相比之前的题,本题特点在于:找到两个字符串中相同的子串,两边都可以删除操作,子串的相对排列顺序不变。

动态规划五部曲:

(1)确定dp数组以及下标的含义

dp[i][j]:以i-1为结尾的字符串word1,和以j-1为结尾的字符串word2,想要达到相等,所需要删除元素的最小次数。。。。。。。两边都计算在内吗?

(2)确定递推公式

情况一:当word1[i-1]和word2[j-1]相同的时候

情况二:当word1[i-1]和word2[j-1]不相同的时候

当word1[i - 1] 与 word2[j - 1]相同的时候,dp[i][j] = dp[i - 1][j - 1];  意思就是当前字符相同,需要删除的元素次数跟前一个元素对应的值相同

当word1[i-1]与word2[j-1]不相同的时候,有三种情况::

情况1:删除word1[i-1],最少操作次数dp[i-1][j]+1;

情况2:删除word2[j-1],最少操作次数dp[i][j-1]+1;  相当于i-1位置的元素1和j-1位置的元素2不相同,回到i-1位置和j-2位置再比较,同时删除操作+1;或者回到i-2和j-1位置再比较,删除操作+1

情况3:同时删除word1[i-1]和word2[j-1],操作最少次数为dp[i-1][j-1]+2

最后取三种情况中的最小值:

dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+2)

(3)dp数组如何初始化

根据推导公式,dp[0][j]和dp[i][0]一定需要初始化,根据数组定义,只要i=0,或者j=0,dp[i][j]都没有合适的子串,不为0的字符串全部需要删除i次或者j次,所以dp[i][0]=i;     dp[0][j]=j

(4)确定遍历顺序

从上到下,从左到右

(5)举例推导

dp[1][1]=min(dp[0][1]+1,dp[1][0]+1,dp[0][0]+2)=2

dp[1][2]=min(dp[0][2]+1,dp[1][1]+1,dp[0][1]+2)=3

。。。

第二题:编辑距离

给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。

你可以对一个单词进行如下三种操作:

  • 插入一个字符

  • 删除一个字符

  • 替换一个字符

  • 示例 1:

  • 输入:word1 = "horse", word2 = "ros"

  • 输出:3

将一个字符串转变为另一个字符串,增删改最少操作次数

(1)确定dp数组以及下标的含义

dp[i][j]表示以下标i-1为结尾的字符串word1,和以下标j-1为结尾的字符串word2,最近编辑距离为dp[i][j]

(2)确定推导公式

情况1:word1[i-1]==word2[j-1]           dp[i][j]=dp[i-1][j-1]

情况2:word1[i-1]不等于word2[j-1]

可对字符串增加、删除、换

操作一:word1删除一个元素,那么就是以下标i - 2为结尾的word1 与 j-1为结尾的word2的最近编辑距离 再加上一个操作。

即 dp[i][j] = dp[i - 1][j] + 1;

操作二:word2删除一个元素,那么就是以下标i - 1为结尾的word1 与 j-2为结尾的word2的最近编辑距离 再加上一个操作。

即 dp[i][j] = dp[i][j - 1] + 1;

word1增加元素,等于word2删除元素,所以增加操作和删除操作是一体的

操作三:替换元素,word1替换word1[i - 1],使其与word2[j - 1]相同,此时不用增删加元素。

可以回顾一下,if (word1[i - 1] == word2[j - 1])的时候我们的操作 是 dp[i][j] = dp[i - 1][j - 1] 对吧。

那么只需要一次替换的操作,就可以让 word1[i - 1] 和 word2[j - 1] 相同。

所以 dp[i][j] = dp[i - 1][j - 1] + 1;

综上:dp[i][j]取最小的值

dp[i][j]=min({dp[i-1][j-1],dp[i-1][j],dp[i][j-1]})+1

(3)dp数组初始化

跟上题相同,dp[i][0]和dp[0][j]均需要初始化,0字符串和其他长度的字符串的最小操作均为对方长度,所以dp[i][0]=i;  dp[0][j]=j

(4)确定遍历顺序

根据递推公式,dp[i][j]的遍历顺序应该是从上到下,从左到右

(5)举例推导

dp[1][1]对应的两个字符不相同,属于第二种情况

即dp[1][1]=min({dp[i-1][j-1],dp[i-1][j],dp[i][j-1]})+1=min(0,1,1)+1=1

...

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

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

相关文章

单元测试学习

回顾测试理论基础 单元测试基础知识 什么是单元测试 单元测试流程、测试计划 测试策略设计、实现 单元测试 - 执行 HTML 报告生成 1 软件测试分类 目标 回顾测试理论知识-测试分类 1. 测 试分类 代码可见度上-划分分类: 1. 黑盒测试 2. 灰盒测试 3. …

Mac允许任何来源的的安装包进行安装

首先打开终端,开启“任何来源”,执行如下命令: sudo spctl --master-disable 然后回车,继续输入密码(密码输入时是不可见的),然后回车。 接着打开【系统偏好设置】,选择【安全性与…

梦百合上榜2023鼎革奖数字化转型先锋榜

10月26日,第六届“鼎革奖”数字化转型先锋榜单揭晓,梦百合家居凭借数字化生产的卓越成果——SAP管理平台及供应链项目,入选2023【鼎革奖】数字化转型先锋榜年度供应链转型典范,梦百合家居COO 崔慧明同步入选2023【鼎革奖】数字化转型先锋榜年度首席运营官。 据了解,「鼎革奖」数…

用CHAT编写代码

今天小编带大家来试试用CHAT 写代码 问:本题要求编写程序,计算出从n个不同元素中取出m个元素(m≤n)的组合数。用c语言 CHAT 回复:在C语言中,我们可以通过事先定义一个函数用于计算阶乘,然后利用…

在如今的大环境下你是否选择测试岗?——打造敏捷测试团队

摘要:敏捷转型大潮汹涌而来,各大技术公司均被卷入其中,在管理层的重视下,效能提升成为测试团队日常工作的口头禅。但是我们也看到,敏捷转型的效果参差不齐,真正深入理解敏捷要义的骨干员工数量很少&#xf…

Maven Repository使用

1.Maven Repository网站 https://mvnrepository.com/https://mvnrepository.com/ 2.查询需要的依赖 3.参考例子 <!-- https://mvnrepository.com/artifact/org.freeswitch.esl.client/org.freeswitch.esl.client --> <dependency> <groupId>org.freesw…

needle库下载TypeScript程序用HTTP做个爬虫模版

下面是一个使用needle库进行下载的TypeScript程序&#xff0c;它下载了pinduoduo的内容&#xff0c;并且使用了proxy_host为duoip&#xff0c;proxy_port为8000的爬虫IP。 import needle from needle;// 设置爬虫IP needle.requestDefaults({proxy: {host: duoip,port: 8000} }…

不擅长花言巧语,但擅长把好东西分享给你

现在买冬装&#xff0c;不是为了让你立马穿上 而是等到寒冷天气的来临 别人你还在急急忙忙准备冬衣时 你的宝贝已经穿上新衣快快乐乐地出门啦

【C++代码】买卖股票最佳时机系列,动态规划--代码随想录

题目&#xff1a;买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你…

使用lua-resty-request库编写爬虫IP实现数据抓取

目录 一、lua-resty-request库介绍 二、使用lua-resty-request库进行IP数据抓取 1、获取IP地址 2、设置请求 3、处理数据 三、代码实现 四、注意事项 五、总结 本文将深入探讨如何使用lua-resty-request库在爬虫程序中实现IP数据抓取。我们将首先介绍lua-resty-request…

Mac安装DBeaver

目录 一、DBeaver Mac版软件简介 二、下载地址 三、DBeaver连接失败报错 3.1 问题描述 3.2 连接失败问题解决 一、DBeaver Mac版软件简介 DBeaver Mac版是一款专门为开发人员和数据库管理员设计的免费开源通用数据库工具。软件的易用性是它的宗旨&#xff0c;是经过精心设计…

AMEYA360祝贺:大唐恩智浦荣获「2023年度最佳电源管理芯片奖」

2023年10月30日&#xff0c;由芯师爷主办、慕尼黑华南电子展协办、深圳市半导体行业协会支持的“第五届硬核芯生态大会暨2023汽车芯片技术创新与应用论坛”及“2023 年度硬核芯评选颁奖盛典”在深圳圆满落幕。 本次峰会以“芯生万象&#xff0c;集成未来”为主题&#xff0c;汇…

战略管理BLM模型

随着华为战略的成功&#xff0c;越来越多人的了解战略管理的方法BLM业务领先模型&#xff0c;今天从BLM模型各要素开始介绍模型及元素。 一、BLM业务领先模型 Business Leadership Model (BLM) 该模型采用一系例工具进行3年战略规划滚动、年度经营计划与跟踪&#xff0c;实现…

php计算中英文字符串长度方法

1、mb_strlen计算中英文函数长度 可以使用mb_strlen()函数来计算中英文字符串的长度。该函数可以计算多字节字符的长度&#xff0c;包括中文和其他非英文字母字符。 $str "Hello 你好"; $length mb_strlen($str, UTF-8); echo "字符串的长度是&#xff1a;…

大龄程序员的曙光?探讨2023程序员就业现象的真相

看到了官方发布的 2023开发者职场生存白皮书 &#xff08;感兴趣的小伙伴可以点击链接跳转至原文看一看&#xff09;&#xff0c;尽管一直保持着乐观心态的我&#xff0c;面对着马上到来的所谓 「35岁中年危机」&#xff0c;内心多多少少的也有些焦虑&#xff0c;作为即将下场的…

Tomcat运行日志乱码问题/项目用tomcat启动时窗口日志乱码

文章目录 一、问题描述&#xff1a;二、产生原因三、解决方法 一、问题描述&#xff1a; 项目在idea中运行时日志是正常的&#xff0c;用Tomcat启动时发现一大堆看不懂的文字&#xff0c;如 二、产生原因 产生乱码的根本原因就是编码和解码不一致&#xff0c;举个例子就是翻…

国产数据库达梦DM8迁移工具

点击上方蓝字关注我 DM数据迁移工具DM DTS提供了主流大型数据库迁移到 DM、DM 到 DM、文件迁移到 DM 以及 DM 迁移到文件等功能&#xff0c;在做国产数据库适配过程中经常需要将现有数据库的数据迁移至国产数据库中&#xff0c;因此适配达梦DM8数据库时&#xff0c;可以使用DM …

Go 如何实现并发

Go语言的并发机制是其强大和流行的一个关键特性之一。Go使用协程&#xff08;goroutines&#xff09;和通道&#xff08;channels&#xff09;来实现并发编程&#xff0c;这使得编写高效且可维护的并发代码变得相对容易。下面是Go的并发机制的详细介绍&#xff1a; 协程&#x…

【蓝桥杯选拔赛真题46】python山谷 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析

目录 python山谷 一、题目要求 1、编程实现 2、输入输出 二、算法分析

61. 旋转链表、Leetcode的Python实现

博客主页&#xff1a;&#x1f3c6;李歘歘的博客 &#x1f3c6; &#x1f33a;每天不定期分享一些包括但不限于计算机基础、算法、后端开发相关的知识点&#xff0c;以及职场小菜鸡的生活。&#x1f33a; &#x1f497;点关注不迷路&#xff0c;总有一些&#x1f4d6;知识点&am…