动态规划-两个数组的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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

zabbix触发器配置定期生效教程

在企业生产过程中&#xff0c;并非所有的设备都需要全天候、满负载运转&#xff0c;也有些仅需要周期性的运转即可。例如&#xff0c;在某家企业&#xff0c;有一批这样的机器&#xff0c;每天都会在固定的时间跑批量任务&#xff0c;期间&#xff0c;机器的CPU使用率会有明显的…

学前端网络安全这块还不懂?细说CSRF

什么是CSRF&#xff1f; 举个栗子&#xff0c;比如我们需要在某个博客上删除一个文章&#xff0c;攻击者首先在自己的域构造一个页面&#xff0c;使用了一个img标签&#xff0c;其地址指向了删除博客的链接。攻击者诱使目标用户&#xff0c;也就是博客主访问这个页面&#xff…

脉冲水路清洗机,全自动脉冲技术清除管道堵塞

邦注脉冲水路清洗机是一种高效的清洗设备&#xff0c;它利用全自动脉冲技术来清除管道内的堵塞和污垢。以下是对该设备的一些详细描述&#xff1a; 全自动脉冲技术&#xff1a;脉冲水路清洗机采用了全自动脉冲技术&#xff0c;这是一种先进的清洗方法。该技术通过产生高强度的…

##21 深入理解文本处理:使用PyTorch进行NLP基础操作

文章目录 前言简介文本预处理实现分词构建词汇表 文本向量化构建简单的文本分类模型结论 前言 在现代深度学习应用中&#xff0c;文本处理是不可或缺的一部分&#xff0c;尤其在自然语言处理&#xff08;NLP&#xff09;领域。借助强大的框架如PyTorch&#xff0c;我们可以更加…

AI 绘画神器 Fooocus 图生图:图像放大或变化、图像提示、图像重绘或扩充、反推提示词、生成参数提取、所需模型下载

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 大家好&#xff0c;我是水滴~~ 本文讲述 Fooocus 的图生图功能&#xff0c;主要内容包括&#xff1a;图像放大或变化、图像提示、图像重绘或扩充、反推…

Typora+PicGo+Gitee设置图床,解决CSDN上传markdown文件图片加载不出来的问题(超级实用)

注&#xff1a; 由于gitee现在已经加上了防盗链&#xff0c;并且只支持1M的图片&#xff0c;我觉得不是很好用&#xff08;可以买腾讯云或阿里云等&#xff09;&#xff0c;之后找到比较好点的图床工具也会持续更新的。&#xff08;sm.ms好像还好&#xff0c;github网速不太稳定…

查询新加 字段不返回数据要看 有没有 AllInfoResultMap 有要再里面加字段

查询新加 字段不返回数据要看 有没有 AllInfoResultMap 有要再里面加字段

容联云零代码平台容犀desk:重新定义坐席工作台

在数智化浪潮的推动下&#xff0c;企业亟待灵活适应市场变化、快速响应客户需求&#xff0c;同时还要控制成本并提升效率&#xff0c;传统的软件开发模式因开发周期长、成本高、更新迭代慢等问题&#xff0c;逐渐难以满足企业灵活多变的业务需求。 容犀Desk&#xff0c;观察到…

山东大学计算机考研数据分析,初复试占比6:4,复试内容不少得花精力准备!

山东大学&#xff08;ShandongUniversity&#xff09;&#xff0c;简称山大&#xff0c;位于中国山东&#xff0c;是中华人民共和国教育部直属的综合性全国重点大学&#xff0c;是国家“211工程”、“985工程”重点建设院校&#xff0c;入选“111计划”、“珠峰计划”、“卓越工…

数据结构——直接插入排序

基本思想 再插入第i个元素时&#xff0c;前面i-1个已经排好序。 排序过程 初始状态&#xff08;假设第一个元素为有序&#xff0c;其余均为无序元素&#xff09; 问题一&#xff1a;如何构建初始的有序序列&#xff1f; 办法 将第一个记录看成是初始有序表&#xff0c;然后…

计算概论学习笔记(2)

感谢北大李戈老师讲解的计算概论。 【道阻且长&#xff0c;行则将至】 很多年没有intensive coding&#xff0c;现在这个系列是coding retake&#xff0c;一点点回忆之前的知识&#xff0c;希望能重回到一线。主要内容包括C,C,Pytorch学术前沿项目学习和实践&#xff0c;预计…

AI大模型日报#0515:Google I/O大会、 Ilya官宣离职、腾讯混元文生图大模型开源

导读&#xff1a;欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”&#xff08;ERNIE 4.0&#xff09;、“零一万物”&#xff08;Yi-34B&#xff09;生成了今日要点以及每条资讯的摘要。 《AI大模型日报》今日要点&#xff1a;谷歌…

运用MongoDB Atlas释放开发者潜能同时把控成本

在当下的商业环境中&#xff0c;不可预测性已经成为常态&#xff0c;工程团队负责人必须在把控不可预测性和优化IT成本的双重挑战下谋求平衡。 咨询公司德勤2024 MarginPLUS调查收集了300多位企业负责人的见解&#xff0c;报告中重点介绍了面对动荡的全球经济环境&#xff0c;…

国际生物多样性科普暨母亲节亲子活动在天河公园举行

引言&#xff1a;"人类是命运共同体&#xff0c;不论是战胜新冠疫情&#xff0c;还是加强生物多样性保护&#xff0c;实现全球可持续发展&#xff0c;唯有团结合作&#xff0c;才能有效应对全球性挑战。生态兴则文明兴。我们应该携手努力&#xff0c;共同推进人与自然和谐…

抖音评论采集python爬虫(含一二级评论内容)

声明 仅用于学习交流&#xff0c;不用于其他用途 正文 随着抖音评论采集更新需要登录&#xff0c;由于不懈的努力&#xff0c;攻破这一难点&#xff0c;不需要登录采集作品所有评论信息 话不多说上代码看效果&#xff1a; 输入作品id: 这样就拿到评论信息了&#xff0c;可以…

数字化档案真能永久保存吗

数字化档案可以长期保存&#xff0c;但不能永久保存。虽然数字化技术可以提供更好的保存手段和更方便的存取方式&#xff0c;但数字化档案仍然面临一些挑战和风险。 首先&#xff0c;数字化档案需要依赖特定的技术和设备进行读取和处理。如果这些技术和设备过时或无法使用&…

Java 开发 框架安全:Spring 命令执行漏洞.(CVE-2022-22965)

什么叫 Spring 框架. Spring 框架是一个用于构建企业级应用程序的开源框架。它提供了一种全面的编程和配置模型&#xff0c;可以简化应用程序的开发过程。Spring 框架的核心特性包括依赖注入&#xff08;Dependency Injection&#xff09;、面向切面编程&#xff08;Aspect-Or…

工厂自动化升级改造(3)-Modbus与MQTT的转换

什么是MQTT,Modbus,见下面文章 工厂自动化升级改造参考(01)--设备通信协议详解及选型-CSDN博客文章浏览阅读608次,点赞9次,收藏6次。>>特点:基于标准的以太网技术,使用TCP/IP协议栈,支持高速数据传输和局域网内的设备通信。>>>特点:跨平台的通信协议,…

并发-sleep更优雅的实现方案:TimeUnit.枚举常量.sleep()

首先给出结论&#xff1a;线程使用中的暂停&#xff0c;建议优先使用TimeUnit类中的sleep()但需要注意传入时间小于0的异常情况TimeUnit是java.util.concurrent包下的一个类名主要功能是暂停线程的操作拥有与Thread.sleep()一样的功能都是暂停线程&#xff0c;但TimeUnit提供了…

Polylang Pro插件下载:多语言网站构建的终极解决方案

在全球化的今天&#xff0c;多语言网站已成为企业拓展国际市场的重要工具。然而&#xff0c;创建和管理一个多语言网站并非易事。幸运的是&#xff0c;Polylang Pro插件的出现&#xff0c;为WordPress用户提供了一个强大的多语言解决方案。本文将深入探讨Polylang Pro插件的功能…