算法|Day48 动态规划16

LeetCode 583- 两个字符串的删除操作

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目描述:给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数

每步 可以删除任意一个字符串中的一个字符。

解题思路

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

dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,最少删除dp[i][j]个元素,可以得到相同的字符串。

  1. 确定递推公式

首先分两种情况,当前字符相等不相等,若相等,则直接dp[i][j] = dp[i-1][j-1]表示我们不用执行任何操作。

若不相等,则需要分三种情况

    • 首先是删除第一个字符串中的字符,也就是dp[i-1][j]+1
    • 其次有可能我们要删除第二个字符串中的元素,也就是dp[i][j-1]+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});

  1. dp数组如何初始化

dp[i][0] 表示以下标i-1为结尾的字符串和空串相等所需要操作的最少步数,故应该是i,故dp[i][0]=i, dp[0][j]同理。

  1. 确定遍历顺序

依据递推公式我们可以看出,dp[i][j]是由左边和左上的以及上面的状态推出的,所以我们从上至下,从左向右遍历即可。

  1. 举例推导dp数组
class Solution {
public:int minDistance(string word1, string word2) {vector<vector<int>> dp(word1.size() + 1, vector<int>(word2.size() + 1));for (int i = 0; i <= word1.size(); i++) dp[i][0] = i;for (int j = 0; j <= word2.size(); j++) dp[0][j] = j;for (int i = 1; i <= word1.size(); i++) {for (int j = 1; j <= word2.size(); j++) {if (word1[i - 1] == word2[j - 1]) {dp[i][j] = dp[i - 1][j - 1];} else {dp[i][j] = min(dp[i - 1][j] + 1, dp[i][j - 1] + 1);}}}return dp[word1.size()][word2.size()];}
};

总结:

  • 这题可以省略dp[i-1][j-1]+2这种情况,因为这种情况我们已经在别的情况里讨论到了,也就是dp[i-1][j]+1是删除i,dp[i][j-1]是删除j,两个各执行一次就包含了这种情况了。

LeetCode 72- 编辑距离

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目描述:给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数

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

  • 插入一个字符
  • 删除一个字符
  • 替换一个字符

解题思路

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

dp[i][j]:代表字符串1以i-1下标为结尾的部分和字符串2以j-1为结尾的部分,转换所需要的最小操作数。

2.确定递推公式

我们需要分情况讨论,首先字符串1与字符串2当前字符相等或不等的情况,

  • 相等,则不进行操作。也就是dp[i][j] = dp[i-1][j-1]
  • 不相等时又有三种操作,删除第一个字符串中的字符删除第二个字符串中的字符或修改其中一个字符(这样就可以使得这两个字符在下标范围内通过这些操作可以成相同的了)。故我们又取最小值,故dp[i][j] = min({dp[i-1][j],dp[i][j-1],dp[i-1][j-1]}) + 1

这里我们不用考虑插入元素,为什么呢?因为插入就相当于是添加元素,如果我们删除第一个字符串的一个字符,就等同于给第二个字符串添加一个元素。

3.dp数组如何初始化

首先dp[i][0]代表的是第一个字符串从i-1下标开始,第二个字符串为空串时,操作最少步骤,使得两个字符串相等。故我们全部只需要删除即可,也就是i步即可。dp[0][j]同理。

4.确定遍历顺序

依据递推公式我们可以看出,dp[i][j]是由左边和左上的以及上面的状态推出的,所以我们从上至下,从左向右遍历即可。

5.举例推导dp数组

class Solution {
public:int minDistance(string word1, string word2) {int len1 = word1.size();int len2 = word2.size();vector<vector<int>> dp(len1+1,vector<int>(len2+1,0));for(int j=0;j<=len2;j++)dp[0][j] = j;for(int i=0;i<=len1;i++)dp[i][0] = i;for(int i=1;i<=len1;i++){for(int j=1;j<=len2;j++){if(word1[i-1] == word2[j-1]){dp[i][j] = dp[i-1][j-1];}else{dp[i][j] = min({dp[i-1][j-1],dp[i-1][j],dp[i][j-1]})+1;}}}return dp[len1][len2];}
};

总结:

  • 本题关键还是要理解dp数组的含义,要将其牢记在心,这样才能真正弄懂一道题。这题主要难点就是对于两个字符串进行操作的时候的情况讨论。

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

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

相关文章

SpringBoot 整合 Websocket 通信demo (附浏览器聊天窗口)

1. 依赖 <!-- SpringBoot WebSocket --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>2. 自动注册配置类 import org.springframework.context…

巨人互动|Google海外户Google排名算法机制

谷歌是目前最流行的搜索引擎之一&#xff0c;它的排名算法机制是谷歌搜索引擎的核心。谷歌的排名算法机制可以分为两个部分&#xff1a;计算网页相关度和排序结果。 一、计算网页相关度 谷歌通过计算每个页面的相关度来确定搜索结果的优先级。相关度是根据页面上的关键词、图…

【Java从入门到精通】这也许就是Java火热的原因吧!

前言&#xff1a;Java是一种高级的、面向对象的、可跨平台的程序设计语言。Java根据技术类别可划分为以下几类&#xff1a;JavaSE&#xff08;Standard Edition&#xff0c;标准版&#xff09;&#xff1a;支持面向桌面、嵌入式和移动设备的应用程序开发&#xff1b;JavaEE&…

input子系统框架、外设驱动开发

一、input子系统基本框架 Linux内核为了两个目的&#xff1a; 简化纯输入类外设&#xff08;如&#xff1a;键盘、鼠标、游戏杆、轨迹球、触摸屏。。。等等&#xff09;的驱动开发统一输入类外设产生的数据格式&#xff08;struct input_event&#xff09;&#xff0c;更加方…

功率放大器的作用有哪些

功率放大器是电子设备中常见的一个组件&#xff0c;其作用是将输入信号的能量放大到更高的功率级别&#xff0c;以用于驱动高功率负载或者提供足够的功率来满足特定需求。功率放大器在各种应用领域中发挥着重要作用&#xff0c;下面将详细介绍功率放大器的作用与应用。 图&…

亚信科技AntDB数据库携“U8C+AntDB联合产品”亮相“2023全球商业创新大会”,开启生态合作新篇章

8月18-19日&#xff0c;近万人齐聚上海国家会展中心&#xff0c;带着对数字化、数智化趋势和热点的关注&#xff0c;以满腹热情投身到以“数据驱动 智能运营”为主题的“2023全球商业创新大会”&#xff0c;共商新技术条件下企业信息化出现的新课题、新挑战&#xff0c;共享数智…

Linux配置成代理服务器

Linux配置成代理服务器 什么是代理服务器 把Linux配置成代理服务器 开放的代理服务器 升级需要账号密码的代理服务器 Linux系统使用代理服务器 临时通过代理访问 永久通过代理访问 Windows系统使用代理服务器 什么是代理服务器 代理服务器&#xff08;Proxy Server&am…

【LeetCode-中等题】 454. 四数相加 II

文章目录 题目方法一&#xff1a;哈希表 题目 方法一&#xff1a;哈希表 哈希表记录前两个数组的和以及出现次数&#xff0c;然后记录后面两个数组的和&#xff0c;成功将四数之和转换为两数之和 因为本题特殊在和是为0 的 所以后面的两个数组之和取反 如果能在map的key中存在…

SpringMVC系列(六)之JSON数据返回以及异常处理机制

目录 前言 一. JSON概述 二. JSON数据返回 1. 导入pom依赖 2. 添加配置文件&#xff08;spring-mvc.xml&#xff09; 3. ResponseBody注解使用 4. 效果展示 5. Jackson介绍 三. 全局异常处理 1. 为什么要全局异常处理 2. 异常处理思路 3. 异常处理方式一 4. 异常处…

pip命令来查看当前激活的虚拟环境

要查看已安装的虚拟环境&#xff0c;您可以使用以下命令&#xff1a; pip freeze该命令将列出所有已安装的包及其版本信息。在虚拟环境中运行时&#xff0c;它将仅显示该虚拟环境中安装的包。 这将列出所有已创建的虚拟环境以及当前激活的环境。 python -m venv list

windows下安装redis扩展库

1.根据PHP版本号&#xff0c;编译器版本号和CPU架构 选择php_redis和php_igbinary文件(如果是选择线程的情况下需要再去配置php5ts.dll) windows.php.net - /downloads/pecl/releases/redis/ windows.php.net - /downloads/pecl/releases/igbinary/ php_igbinary-3.1.2-7.2-…

02_Flutter自定义Sliver组件实现分组列表吸顶效果

02_Flutter自定义Sliver组件实现分组列表吸顶效果 一.先上效果图 二.列表布局实现 比较简单&#xff0c;直接上代码&#xff0c;主要使用CustomScrollView和SliverToBoxAdapter实现 _buildSection(String title) {return SliverToBoxAdapter(child: RepaintBoundary(child: C…

数据分析之面试题目汇总(万字解读)

1、解释数据清洗的过程及常见的清洗方法。 数据清洗是指在数据分析过程中对数据进行检查、处理和纠正的过程&#xff1b;是数据预处理的一步&#xff0c;用于处理数据集中的无效、错误、缺失或冗余数据 常见的清洗方法包括&#xff1a;处理缺失值、处理异常值、去除重复值、统一…

Java 并发编程面试题——Fork/Join 框架

目录 1.什么是 Fork/Join 框架&#xff1f;2.什么是工作窃取算法&#xff1f;它有什么作用&#xff1f;有什么优缺点&#xff1f;3.如何设计一个 Fork/Join 框架&#xff1f;4.如何使用 Fork/Join 框架&#xff1f;5.Fork/Join 框架的实现原理是什么&#xff1f;5.1.ForkJoinTa…

论文笔记:一分类及其在大数据中的潜在应用综述

0 概述 论文&#xff1a;A literature review on one‑class classification and its potential applications in big data 发表&#xff1a;Journal of Big Data 在严重不平衡的数据集中&#xff0c;使用传统的二分类或多分类通常会导致对具有大量实例的类的偏见。在这种情况…

字符串之间的转换(char*、const char*、char[]、string、QString、QByteArray、int、double)

目录 一、申请空间的几种方法&#xff1a; 1、C语言 2、C 二、各个字符串的转换 1、char* 与 unsigned char*、char* 与 const char*、char* 与 char[ ] 2、string 与 char*、string 与 unsigned char*、string 与 QString、string 与 int、double 3、QString 与 int 、…

重新定义每天进步一点点

日拱一卒&#xff0c;每天进步一点点~ 这个主题之前写过一次&#xff0c;今天看了《全情投入》又有了新的感触&#xff0c;于是将其记录下来。 关于目标的设定问题 目标不是改变自己的日常行动&#xff0c;而是改变进行活动时的思维&#xff01; 有些事情&#xff0c;坚持下…

企业进行媒体宣传的重要性

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约&#xff0c;简而言之&#xff0c;是企业或组织主动邀请媒体参与某个事件或活动&#xff0c;如新闻发布会、新产品发布、开业庆典等&#xff0c;目的是希望媒体报道并传播这些消…

CentOS 8 通过YUM方式升级最新内核

CentOS 8 通过YUM方式升级最新内核 查看当前内核 uname -r 4.18.0-193.6.3.el8_2.x86_64导入 ELRepo 仓库的公钥&#xff1a; rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org安装升级内核相关的yum源仓库(安装 ELRepo 仓库的 yum 源) yum install https://www…

远程连接PostgreSQL:配置指南与安全建议

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…