第47天|LeetCode392. 判断子序列、LeetCode392. 判断子序列

news2024/11/26 5:38:37

1.题目链接:392. 判断子序列

题目描述:

                给定字符串 s 和 t ,判断 s 是否为 t 的子序列。

                字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。

                进阶:

                如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?

                致谢:

                特别感谢 @pbrother 添加此问题并且创建所有测试用例。

解法:

                ①此题判断字符串s是否是t的子序列,就相当于求s和t的最长公共子序列的长度就是s的长度。

                ②明确dp的含义,因为要表示两个序列,所以dp是二维的。dp[i][j]表示的是以i-1为结尾的s和以j-1为 结尾的t的最长公共子序列的长度为dp[i][j]。

                ③递推公式:

                        dp[i][j] = ?

                                1)if(ch1[i-1] == ch2[j-1])---即遇到相同的元素了,那么最长公共子序列的长度应该加1,那么就是在相等的i,j的前一个加1,即dp[i-1][j-1] + 1.

                                2)如果不等于呢?dp[i][j] = ?不相等的时候我们只能删除t,不能删除s,所以就相当于删除t中的那个不同的元素 --- 即相当于跳过那个元素,所以当前的结果就 = t中不同的那个元素的前面的所有元素和s求最长公共子序列长度,故dp[i][j] = dp[i][j-1]

                ④初始化:

                        1)因为根据递推公式,当前的元素值都是根据左边和左上边的值求得的,所以要初始化第一行和第一列。

                        2)那么dp[0][j] --- 即空串和非空串的最长公共子序列的长度为0;dp[i][0] --- 即非空串和空串的最长公共子序列的长度为0;其他位置,因为根据递推公式当前值其实根据前面的值推导出来的,所以是什么都无所谓,但是首先是长度不能为负数,其次刚开始的时候不知道公共长度是多少,所以赋成0.故全部初始化为0.

                ⑤遍历顺序:

                        因为根据递推公式,是从左边和上边推出的,所以遍历顺序从左到右从上到下。

最后如果dp[s.length][t.length] == s.length,就返回true否则返回false.

下面为代码(java):

2.题目链接:115. 不同的子序列

题目描述:

                给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。

                字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是)

                题目数据保证答案符合 32 位带符号整数范围。

解法:

                ①此题求s子序列中t出现的个数---相当于求有多少种删除方法使得s变成t

                ②明确dp定义,因为要表示两个字符串的比较,所以要是二维的,dp[i][j]表示以i-1为结尾的s中有dp[i][j]个以j-1结尾的t。

                ③递推公式:

                        dp[i][j] = ?

                                if(ch1[i-1] == ch2[j-1]),即如果相等的话,那么考虑s中相等的元素,当前的s包含多少个t,那么以前一个位置为结尾的s也包括多少个以前以前一个位置为结尾的t。

                                如果相等,不考虑s中相等的元素,即eg:bagg 和bag,dp[i-1][j]也可能包括t,故dp[i][j] = dp[i-1][j-1] + dp[i-1][j];

                                如果不相等的话,我们就要删除s中的不相等的那个元素,所以dp[i][j] = dp[i-1][j].

                ④初始化:

                        根据递推公式,是根据上面和左边的值得到的当前值,所以初始化第一行和第一列。

                        dp[i][0]---非空字符串中包含多少个空字符串,这样不好想---变化一下就是求将非空字符串变成空字符串的删除方法有几种---1种,即全删了。

                        dp[0][j]---空字符串中有多少个非空字符串,即0个。

                        那么就会有一个交集---dp[0][0]---即空串中有多少个空串,即1个。故就初始化dp[i][0] = 1即可其余位置,因为不能为负数,且刚开始不知道有多少个,故初始化成0.

                ⑤遍历顺序:

                        根据递推公式,根据上面和左边的值推导来的,所以遍历顺序从上到 下,从左到右。

                ⑥最后结果,dp[s.length][t.length]

下面为代码(java):

 

3.总结:

                ①判断是否是子序列---相当于求两个序列的最长公共子序列的长度是否是小的序列的长度。递推公式:如果相等,那么dp[i][j] = dp[i-1][j-1] + 1.如果不相等dp[i][j-1]即删除长的序列中的不等的元素。

                ②判断一个序列中可以出现多少个另一个序列---有多少种删除方式,使一个序列变成另一个序列。递推公式:相等的话考虑相等的元素,那么之前有多少个现在就有多少个即dp[i-1][j-1];不考虑相等的元素,即可能bagg,bag即dp[i-1][j].故dp[i][j] = dp[i-1][j-1] + dp[i-1][j]。如果不相等的话,就要删掉长的字符串中不相等的元素,即跳过那个元素dp[i-1][j]。

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

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

相关文章

Barra模型因子的构建及应用系列四之Residual Volatility因子

一、摘要 在前期的Barra模型系列文章中,我们构建了Size因子、Beta因子和Momentum因子,并分别创建了对应的单因子策略。本节文章将在该系列下进一步构建Residual Volatility因子,该策略在2022年以来跑赢大盘指数,且具有波动小的特…

Linux内核内存管理

目录 一、内核内存管理框架 二、内核中常用动态分配 2.1 kmalloc 2.2 vmalloc 2.3 kmalloc & vmalloc 的比较 2.4 分配选择原则: 三、IO访问-------访问外设控制器的寄存器 四、led驱动 1. 读原理图 2. 查阅SOC芯片手册 3. 编写驱动 一、内核内存管理…

Leetcode之消失的数字轮转数组

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、消失的数字一、消失的数字 二、旋转数组 提示:以下是本篇文章正文内容,下面案例可供参考 一、消失的数字 这题找出消失的一个数字&#…

自行车出口欧盟CE认证,新版自行车标准ISO 4210:2023与ISO 8098:2023发布

2023年1月,国际标准化组织ISO发布了新版“自行车以及儿童自行车的测试标准”,即ISO 4210:2023以及ISO 8098:2023,用于取代了SO 4210:2015以及ISO 8098:2015。新版标准一经发布,立即生效。欧盟标准化委员会C…

使用 Python 抓取和优化所有网站图像

,我发布了一个通过FTP自动优化新图像的教程。这次我们将抓取整个网站,并在本地优化我们遇到的图像,按URL组织。请注意,这个简短但中级的脚本不适用于大型站点。首先,所有图像都转储到一个文件夹中。为每个页面创建一个…

ASP.NET 网站开发(联合增,删,改,查)

联合多表查询查询: linqDBDataContext db new linqDBDataContext(); stu d db.stu.Where(p > p.sid 2).FirstOrDefault(); if (d ! null) { var Marks d.marks; GridView1.DataSource Marks; GridView1.DataBind(); db.Su…

理解B树及B+树、B*树

目录 一.B树概念 二.B树插入思路 二.B树分部实现 1.树节点类 2.B树成员结构 3.查找函数 4.插入函数(核心) 5.插入关键值 6.中序遍历(有序) 三.B树实现总代码 四.B树性能分析 五.B树和B*树 1.B树 2.B*树 3.总结 六…

Android上架构建KeyStore应用签名

Android上架构建KeyStore应用签名Android上架构建KeyStore应用签名构建签名生成密钥读取填写使用Android上架构建KeyStore应用签名 我们的应用在上架前需要构建应用签名,使用的是Java进行构建 构建签名 需要有Java环境,注意尽量使用JDK8!使…

CIMCAI super unmanned intelligent gate container damage detect

世界港航人工智能领军者企业CIMCAI中集飞瞳打造全球最先进超级智能闸口无人闸口ceaspectusG™视频流动态感知集装箱箱况残损检测箱况残损识别率99%以上,箱信息识别率99.95%以上World port shipping AI leader CIMCAIThe worlds most advanced super intelligent gat…

RK3588 PMIC/Power电路 PCB 设计指南

1、VDD_LOGIC,VDD_GPU,VDD_NPU,VDD_CPU电源的 DC-DC 远端反馈设计。100ohm反馈电阻需要靠近输出电容放置,电阻一端连接到 DC-DC 输出电容,另一端连接到PMIC 的VOUT 反馈脚上,并同时连接到 RK3588 电源管脚同…

网络信息安全(四)

IIS WEB服务器 服务器配置静态IP 安装WEB服务软件 打开软件 检查80端口是否打开 DNS解析不同域名站点 新建两个网页京东和淘宝 安装DNS组件并创建两个区域 新建主机 XP上指定DNS 正常情况下同一个服务器上一个端口只提供一个服务 添加主机头值 XP验证 IIS FTP服务器 FTP工作模式…

【20230221】【剑指1】排序(中等)II

1.最小的K个数sort直接用太无脑了,虽然底层实现也是快排,但是快排还是得会写啊快速排序快速排序算法有两个核心点,分别为 “哨兵划分” 和 “递归” 。哨兵划分操作: 以数组某个元素(一般选取首元素)为 基准…

教你编写SQLMap的Tamper脚本过狗

测试环境 最新版某狗 测试方法 安全狗其实是比较好绕的WAF,绕过方法很多,但这里我们就用一种:注释混淆 一招鲜吃遍天 注释混淆,其实就是在敏感位置添加垃圾字符注释,常用的垃圾字符有/、!、*、%等 这里再解释一下…

nodejs基于vue高校学报论文在线投稿系统

在新发展的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,高校只能以工作人员为导向,以稿件的持续创新作为高校最重要的竞争手段。 可定制框架:ssm/Sprin…

铅酸蓄电池废水除铅项目,出水做到0.05mg/l

某集团公司铅酸蓄电池废水除铅项目 工艺选择 沉淀系统过滤系统螯合树脂除铅系统 工艺原理 铅离子沉淀后进入螯合树脂除铅树脂 项目背景 铅酸蓄电池具有可逆性、电压特性平稳、放电量大、造价低廉等优点,应用于国民经济各个领域,但在其生产过程中&…

vue3 布局样式的原理

style scoped <style scoped > 它的 CSS 只作用于当前组件中的元素&#xff0c;如果子组件只有一个根元素&#xff0c;也会被渗透 原理&#xff1a; 当我们再组建中使用scoped时&#xff0c;vue会自动为组件中所有元素生成一个随机的属性&#xff0c;形如&#xff1a;da…

01背包—动态规划

一、背包问题概述&#xff1a; 二、暴力解法&#xff1a; 重量价值物品0115物品1320物品2430 背包最大容量为4。 每一个物品有两个状态&#xff0c;“取”或者“不取”。利用回溯法可以暴力枚举所有物品的状态的排列组合状态&#xff0c;与背包最大容量比较就可以求得最大的价…

Cloudflared 内网穿透 使用记录

Cloudflared 内网穿透前提创建cloudflared tunnel我使用的服务前提 你必须要有一个域名&#xff0c;并且可以改域名的dns解析服务商到cloudflare 1.登录到cloudflare后台&#xff0c;点击添加站点 2.输入自己的域名&#xff0c;下一步选择免费套餐 3.他会搜索这个域名下已有…

iOS自动化打包

测试阶段一般会发生这样的场景&#xff0c;测试拼命的提 Bug&#xff0c;开发拼命的改 Bug&#xff0c;改完重新打包发给测试进行复测&#xff0c;那这个过程中频繁的打包肯定是不可避免的。如果使用 Xcode 打包&#xff0c;在打包期间我们是无法改剩余的 Bug 或进行其他模块的…

大规模 IoT 边缘容器集群管理的几种架构-3-Portainer

前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介大规模 IoT 边缘容器集群管理的几种架构-1-RancherK3s大规模 IoT 边缘容器集群管理的几种架构-2-HashiCorp 解决方案 Nomad大规模 IoT 边缘容器集群管理的几种架构-3-Portainer &#x1f4da;️Reference…