代码随想录刷题第54天

倒计时day6。第一题是判断子序列https://leetcode.cn/problems/is-subsequence/description/,动规五步曲分析如下:dp[i][j]表示以下标为i - 1的字符串1与下标为j - 1的字符串2的相同子序列长度。当发现str1[i - 1] == str2[j - 1]时,相同子序列长度加一,dp[i][j]=dp[i - 1][j - 1] + 1,当发现str1[i - 1] != str2[j - 1]时,说明此次遍历位置字符并不相同,则dp[i][j]的状态不发生改变,即dp[i][j] = dp[i][j - 1]。dp[i][0],dp[0][j]表示字符串与空串的匹配情况,故dp[i][0],dp[0][j]均初始化为0。从前向后遍历dp数组。一通分析下来,不难发现思路与最长公共子序列https://leetcode.cn/problems/longest-common-subsequence/description/很相似,事实上,当两个字符串的最长公共子序列为其中一个字符串时,即可判断s是t的一个子序列。

class Solution {
public:bool isSubsequence(string s, string t) {vector<vector<int>> dp(s.size() + 1, vector<int>(t.size() + 1, 0));for (int i = 1; i <= s.size(); i++){for (int j = 1; j <= t.size(); j++){if (s[i - 1] == t[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;else dp[i][j] = dp[i][j - 1];}}if (dp[s.size()][t.size()] == s.size()) return true;return false;}
};

第二题是不同子序列https://leetcode.cn/problems/distinct-subsequences/description/,上一题目的进阶版本。dp[i][j]表示以i - 1为结尾的字符串s中出现以j - 1为结尾的字符串t的个数。若s[i - 1]==t[j - 1],说明可能会出现一次新的匹配,只需观察i-1,j-1之前的匹配情况,判断能否出现一次新的匹配,同时不能丢掉以前的匹配数量,从i-1之前的匹配数量为dp[i-1][j]。综上dp[i][j] = dp[i-1][j-1] + dp[i - 1][j]。若s[i - 1] != t[j - 1],说明此次并未出现新的匹配,dp[i][j]的状态与遍历i-1前相同,即dp[i][j] = dp[i - 1][j]。当j=0时,t为空字符串,s只有当i=0时才会发生一次匹配,故dp[i][0] = 1;而i=0时,空字符串中不会含有字符串t,故dp[0][j] = 0。i,j同时为0时,空字符串中紧=仅含有一个空字符串,dp[0][0] = 1。从小到大遍历dp数组。

class Solution {
public:int numDistinct(string s, string t) {vector<vector<uint64_t>> dp(s.size() + 1, vector<uint64_t> (t.size() + 1, 0));for (int i = 0; i < s.size(); i++) dp[i][0] = 1;for (int i = 1; i <= s.size(); i++){for (int j = 1; j <= t.size(); j++){if (s[i - 1] == t[j - 1]) dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];else dp[i][j] = dp[i - 1][j];}}return dp[s.size()][t.size()];}
};

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

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

相关文章

【项目】Boost 搜索引擎

文章目录 1.背景2.宏观原理3.相关技术与开发环境4. 实现原理1.下载2.加载与解析文件2.1获取指定目录下的所有网页文件2.2. 获取网页文件中的关键信息2.3. 对读取文件进行保存 3.索引3.1正排与倒排3.2获取正排和倒排索引3.3建立索引3.3.1正排索引3.3.2倒排索引 4.搜索4.1 初始化…

UNIAPP微信小程序中使用Base64编解码原理分析和算法实现

为何要加上UNIAPP及微信小程序&#xff0c;可能是想让检索的翻围更广把。&#x1f607; Base64的JS原生编解码在uni的JS引擎中并不能直接使用&#xff0c;因此需要手写一个原生的Base64编解码器。正好项目中遇到此问题&#xff0c;需要通过URLLink进行小程序跳转并携带Base64参…

Linux第73步_学习Linux设备树和“OF函数”

掌握设备树是 Linux驱动开发人员必备的技能&#xff01; 1、了解设备树文件 在3.x版本以前的Linux内核源码中&#xff0c;存在大量的“arc/arm/mach-xxx”和“arc/arm/plat-xxx”文件夹&#xff0c;里面很多个“.c”和“.h”文件&#xff0c;它们用来描述设备信息。而现在的A…

Clock uncertainty的通俗解释

在这篇短文里&#xff0c;我会分别用专业和通俗&#xff08;比如举例子&#xff09;的语言解释一下下面出现的专业术语各是什么意思&#xff0c;以及这句话整体的含义&#xff1a;clk uncertainty 组成&#xff1a; PLL jitter &#xff08;cycle to cycle的因素&#xff09;ne…

MySQL实战:SQL优化及问题排查

有更合适的索引不走&#xff0c;怎么办&#xff1f; MySQL在选取索引时&#xff0c;会参考索引的基数&#xff0c;基数是MySQL估算的&#xff0c;反映这个字段有多少种取值&#xff0c;估算的策略为选取几个页算出取值的平均值&#xff0c;再乘以页数&#xff0c;即为基数 查…

FPGA高端项目:FPGA基于GS2971的SDI视频接收+GTX 8b/10b编解码SFP光口传输,提供2套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收转HDMI输出应用本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放Video Mixer多路视频拼接应用本方案的SDI接收OSD动态字符叠加…

【ARM Trace32(劳特巴赫) 高级篇 21 -- SystemTrace ITM 使用介绍】

文章目录 SystemTrace ITMSystemTrace ITM 常用命令Trace Data AnalysisSystemTrace ITM CoreSight ITM (Instrumentation Trace Macrocell) provides the following information: Address, data value and instruction address for selected data cyclesInterrupt event info…

Maven基础简介

作者简介&#xff1a; zoro-1&#xff0c;目前大二&#xff0c;正在学习Java&#xff0c;数据结构&#xff0c;spring等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; Maven简介 Maven是什么 Maven…

Qt5.14.2揭秘Qt与SSL/TLS的完美邂逅:打造坚不可摧的网络安全防线

引言&#xff1a; 在数字化时代&#xff0c;数据安全是每个开发者和用户都不可忽视的问题。Qt&#xff0c;作为一个强大的跨平台开发框架&#xff0c;为我们提供了丰富的网络功能&#xff0c;其中就包括了对SSL/TLS加密通信的支持。本文将带你深入了解如何在Qt中实现SSL证书认证…

多态详细说明

多态的概述 什么是多态&#xff1f;同类型的对象&#xff0c;执行同一个行为&#xff0c;会表现出不同的行为特征。 多态的形式 父类类型 对象名称 new 子类构造器; 接口 对象名称 new 实现类构造器; 多态中成员访问特点 方法调用&#xff1a;编译看左边&#…

JVM的工作流程

目录 1.JVM 简介 2.JVM 执行流程 3. JVM 运行时数据区 3.1 堆&#xff08;线程共享&#xff09; 3.3 本地方法栈&#xff08;线程私有&#xff09; 3.4 程序计数器&#xff08;线程私有&#xff09; 3.5 方法区&#xff08;线程共享&#xff09; 4.JVM 类加载 ① 类…

【备战蓝桥杯系列】多源最短路弗洛伊德floyd算法

floyd算法 蓝桥杯中&#xff0c;有时也会要求图中任意点的最短路径&#xff0c;这时候虽然可以用dijkstra&#xff0c;但是代码长&#xff0c;用floyd是最短的。模板如下。 模版 时间复杂度O&#xff08;n^3&#xff09; 使用邻接矩阵存储图 初始化&#xff1a;for (int i …

软件测试的就业前景如何?

近年来&#xff0c;进入软件测试的就业人数逐渐增加。现在的社会对软件测试这个职业都有很大的需求。也有很多刚步入社会的年轻人想学习软件测试。那么你知道学习软件测试的的发展前景怎么样吗?看看下面的详细介绍。 关于软件测试行业发展前景问题&#xff0c;是很多准备入行…

Vue 2和Vue 3透传Attributes特性

Vue 2和Vue 3在透传Attributes方面存在一些区别&#xff0c;这些区别主要体现在对Attributes的处理方式和灵活性上。 在Vue 2中&#xff0c;当父组件向子组件传递Attributes时&#xff0c;这些Attributes会自动绑定到子组件的根元素上。这意味着&#xff0c;如果父组件为子组件…

c++ 常用的STL

前言 写这篇博客目的是为了记录在刷算法题中使用过的STL&#xff0c;因为有些不太常用的会遗忘。这篇博客只是作为笔记&#xff0c;不是详细的STL&#xff0c;因此只会对常用方法说明&#xff0c;不会详细介绍。此外在后面用到新的STL内容时会再补充。 列队 基础列队 基本列…

JsonUtility和LitJson的特点与区别

JsonUtility 和 LitJson 都是在 Unity 中用于处理 JSON 数据的工具&#xff0c;它们各自有一些特点和不足。 JsonUtility: 特点&#xff1a; Unity内置支持&#xff1a; JsonUtility 是 Unity 引擎内置的 JSON 序列化和反序列化工具&#xff0c;无需额外的依赖。 简单易用&…

【python】time库知识整理

简介 python的time库是python内置库&#xff0c;主要负责处理与时间相关的事务。 获取当前时间 函数作用time()获取当前时间戳ctime()获取字符串形式的时间gmtime()调用内部方法&#xff0c;赋予属性&#xff0c;能够被程序调用执行 time返回的是时间戳 ctime是返回的我们…

MPU6050详解

文章目录 前言MPU6050简介MPU6050参数 硬件电路MPU6050框图电荷泵的原理 内部时钟生成需要使用的寄存器&#xff08;常用&#xff09;采样率划分器配置寄存器陀螺仪配置寄存器加速度计配置寄存器加速度计测量寄存器温度测量寄存器陀螺仪测量寄存器电源管理1寄存器电源管理2寄存…

Tomcat实现java博客项目、状态页及常见配置介绍

目录 一、自建博客 1. 项目背景 2. 操作示例 二、状态页 1. 概述 2. server status 信息状态页 3. manager app 项目管理状态页 4. host manger 虚拟主机管理状态页 三、常见配置 1. 端口8005/tcp安全配置管理 2. tomcat端口号 3. 虚拟主机设置 4. Context配置 一…

R语言自定义颜色

一、创建颜色梯度&#xff08;渐变色&#xff09; 在绘热图时&#xff0c;需要将数值映射到不同的颜色上&#xff0c;这时就需要一系列的颜色梯度colorRampPalette 函数支持自定义的创建一系列的颜色梯度。 代码示例&#xff1a; library(RColorBrewer)x <- colorRampPal…