动态规划-两个数组的dp问题3

文章目录

  • 1. 两个字符串的最小ASCII删除和(712)
  • 2. 最长重复子数组(718)


1. 两个字符串的最小ASCII删除和(712)

题目描述:
在这里插入图片描述

状态表示:
根据经验以及题目要求,建立二维数组dp,使用dp[i][j]表示s1字符串0到i区间内以及s2字符串0到j区间内的拥有最大ASCII码值的公共子序列。这里使用到了反向思考的思想,仔细看一下题目要求使得两个字符串相等所需删除字符的最小ASCII码值,反过来想就是要求保留下来的公共子序列的ASCII码值最大。
状态转移方程:
这里的状态还是根据s1字符串在0到i区间内以及s2字符串在0到j区间内的最后一个字符进行分析。当s1[i]以及s2[j]都在公共的子序列中,如果满足s1[i]==s2[j],那么dp[i][j]=dp[i-1][j-1]+s1[i]。当s1[i]在公共的子序列中,s2[j]不在公共子序列中,那么可以得到dp[i][j]=dp[i][j-1],其实这里的状态转移方程并不准确,因为dp[i][j-1]也包含s1[i]不在公共的子序列中,s2[j]也不在公共子序列中这种情况,但是没关系因为dp数组的每个值求的是最大值,不怕重复。当s1[i]不在公共的子序列中,s2[j]在公共子序列中,那么可以得到dp[i][j]=dp[i-1][j],这里和上一种情况是类似的,也包含了s1[i]不在公共的子序列中,s2[j]也不在公共子序列中这种情况。最后一种情况就是1[i]不在公共的子序列中,s2[j]也不在公共子序列中,dp[i][j]=dp[i-1][j-1]。
初始化:
为了防止数组越界以及方便运算,给二维数组dp加上第0行以及第0列。这里的第0行和第0列分别代表s1和s2为空串,很好理解,既然为空串就别谈公共子序列的最大ASCII码值了,肯定都是0,因此全部赋为0即可。
填表顺序:
从上至下,从左至右。
返回值:
这里的返回值比较特殊,需要先将s1和s2两个字符串的ASCII码值相加起来之后再减去2*dp[m][n]。
代码如下:

class Solution {public int minimumDeleteSum(String s1, String s2) {int m = s1.length();int n = s2.length();int[][] dp = new int[m + 1][n + 1];int max = 0;for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {if (s1.charAt(i - 1) == s2.charAt(j - 1)) {dp[i][j] = dp[i - 1][j - 1] + (int) s1.charAt(i - 1);}dp[i][j] = Math.max(dp[i][j], Math.max(dp[i][j - 1], dp[i - 1][j]));max = Math.max(max, dp[i][j]);}}int ret = 0;for (int x :s1.toCharArray()) {ret += x;}for (int x :s2.toCharArray()) {ret += x;}return ret - 2 * max;}
}

题目链接
时间复杂度:O(N^2)
空间复杂度:O(N^2)

2. 最长重复子数组(718)

题目描述:
在这里插入图片描述
状态表示:
根据题目要求以及经验,建立二维数组dp,使用dp[i][j]表示两个数组分别在0到i区间以及0到j区间的以i及j位置元素为结尾的最长的公共子数组的长度。
状态转移方程:
子数组问题状态转移方程很简单,分析区间内的最后一个元素,如果0到i区间内最后一个元素和0到j区间内最后一个元素相等,那么dp[i][j]=dp[i-1][j-1]+1,如果不相等,dp[i][j]=0。
初始化:
初始化也还是一样,为了避免越界,给dp加上第0行和第0列,第0行和第0列全部赋为0。因为第0行和第0列是分别代表nums1为空数组以及nums2为空数组,那么这样肯定得不到公共子数组,更别提长度了。
填表顺序:
从上到下,从左至右。
返回值:
dp数组中最大值。
代码如下:

class Solution {public int findLength(int[] nums1, int[] nums2) {int m = nums1.length;int n = nums2.length;int[][] dp = new int[m + 1][n + 1];int max = 0;for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {if (nums1[i - 1] == nums2[j - 1]) {dp[i][j] = dp[i - 1][j - 1] + 1;} else {dp[i][j] = 0;}max = Math.max(max, dp[i][j]);}}return max;}
}

题目链接
时间复杂度:O(N^2)
空间复杂度:O(N^2)

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

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

相关文章

数据结构与算法学习笔记三---栈和队列

目录 前言 一、栈 1.栈的表示和实现 1.栈的顺序存储表示和实现 1.C语言实现 2.C实现 2.栈的链式存储表示和实现 1.C语言实现 2.C实现 2.栈的应用 1.数制转换 二、队列 1.栈队列的表示和实现 1.顺序队列的表示和实现 2.链队列的表示和实现 2.循环队列 前言 这篇文…

JVM 自定义类加载器

文章目录 1. 为什么要自定义类加载器1.1 隔离加载类1.2 修改类加载的方式1.3 扩展加载源1.4 防止源码泄漏 2. 自定义类加载器应用场景有哪些3. 两种实现方式 自定义类加载器是Java中的一个高级特性&#xff0c;允许您在运行时动态加载类。通过自定义类加载器&#xff0c;您可以…

postman 使用教程

1. get 请求 &#xff1f;号后为 get 请求的参数 参数之间用符号"&" 分隔。 假设url 为&#xff1a;http://10.71.7.101/cgi-bin/gw-config.cgi?methodgetway_param&t1715658871647 复制进来到postman的地址栏 后 &#xff1f;后面的参数会自动添加到参…

JS中的宏任务和微任务

JavaScript 引擎是建立在一个事件循环系统之上的&#xff0c;它实时监控事件队列&#xff0c;如果有事件就执行&#xff0c;如果没有事件就等待。事件系统是一个典型的生产消费模式&#xff0c;生产者发出事件&#xff0c;接收者监听事件&#xff0c;在UI 开发中是常见的一个设…

OFDM802.11a的FPGA实现(十五)短训练序列:STS(含Matlab和verilog代码)

原文链接&#xff08;相关文章合集&#xff09;&#xff1a;OFDM 802.11a的xilinx FPGA实现 1.前言 在之前已经完成了data域数据的处理&#xff0c;在构建整个802.11a OFDM数据帧的时候&#xff0c;还剩下前导码和signal域的数据帧&#xff0c;这两部分的内容。 PLCP的前导部分…

【MySQL】Mysql——卸载文档(windows版本)

MySQL卸载文档-Windows版 1. 停止MySQL服务 winR 打开运行&#xff0c;输入 services.msc 点击 “确定” 调出系统服务。 停止Mysql服务 2. 卸载MySQL相关组件 打开控制面板 —> 卸载程序 —> 卸载MySQL相关所有组件 3. 删除MySQL安装目录 4. 删除MySQL数据目录 数…

Axure网上超市用户端APP原型 (O2O生鲜电商/买菜到家/数字零售/京东到家/抖音超市领域)

作品概况 页面数量&#xff1a;共 100 页 源文件格式&#xff1a;rp格式&#xff0c;兼容 Axure RP 9/10&#xff0c;非程序软件无源代码 适用领域&#xff1a;O2O生鲜电商、网上超市、买菜到家、数字零售 作品特色 本作品为网上超市用户消费端Axure交互原型&#xff0c;属于…

食品饮料厂做配送小程序的作用是什么

食品饮料厂品牌旗下通常有多个产品类型&#xff0c;多数是以批发为主&#xff0c;也有直营店及线上直播零售等方式&#xff0c;商家如何将品牌宣传和产品销售的更广是需要思考的&#xff0c;其销售模式也多种多样。 私域店铺也是品牌增长的重要方式&#xff0c;在【雨科】平台…

prompt工程策略(一:使用 CO-STAR 框架来搭建 prompt 的结构)

原文&#xff1a;我是如何赢得GPT-4提示工程大赛冠军的 原文的原文&#xff1a; How I Won Singapore’s GPT-4 Prompt Engineering Competition 为了让 LLM 给出最优响应&#xff0c;为 prompt 设置有效的结构至关重要。CO-STAR 框架是一种可以方便用于设计 prompt 结构的模板…

同为科技详解智能PDU所应用的通信协议与接口

现如今&#xff0c;信息服务、AI人工智能的飞速发展与增长&#xff0c;全球正经历信息数据的爆炸。不仅数据量以惊人的速度增长&#xff0c;而且全球社会各行业对数据的依赖的程度也在日益增加。这些趋势使数据中心在全球都享有关键基础架构的地位。假设某个数据中心发生严重的…

USB2514BI-AEZG-TR USB2.0 接口转换集成电路 QFN-36参数指南

USB2514BI-AEZG-TR USB接口集成电路 USB2514BI-AEZG-TR 是一款USB接口集成电路。工作电压为3.3V&#xff0c;采用36-Pin VQFN封装。它支持USB 2.0协议&#xff0c;最大操作频率为24 MHz&#xff0c;最小操作供应电压为3V&#xff0c;最大输出电流为150mA。该器件适用于需要USB集…

力扣416. 分割等和子集

Problem: 416. 分割等和子集 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 该题目可以归类为0-1背包问题&#xff0c;具体到细节可以再归纳为背包是否装满问题 1.首先判断数组元素和的奇偶性&#xff08;奇数则不能划分&#xff09; 2.我们定义一个二维布尔类型数组…