代码随想录Day58 | 392.判断子序列 115.不同的子序列

代码随想录Day58 | 392.判断子序列 115.不同的子序列

  • 392.判断子序列
  • 115.不同的子序列

392.判断子序列

文档讲解:代码随想录
视频讲解: 动态规划,用相似思路解决复杂问题 | LeetCode:392.判断子序列
状态

本题实际上上还是寻找最长的公共子序列,如果子序列长度和s字符串的长度相等那么就说明可以匹配

  1. dp数组
    dp[i][j] 表示s中0-i-1 在 t中0-j-1能匹配的最长公共子序列长度
  2. 递推公式
    考虑两种情况,s[i-1] == t[j-1]的情况 那么 dp[i][j] = dp[i-1][j-1]+1
    如果不相等,相当于t要删除j-1这个元素与s继续匹配,所以dp[i][j] = dp[i][j-1]
  3. 初始化
    最开始都初始化为0
  4. 遍历顺序
    从前向后
  5. 打印dp
class Solution {
public:bool isSubsequence(string s, string t) {if(s.size() > t.size()) return false;if(s.size() == 0) return true;vector<vector<int>> dp(s.size()+1,vector<int>(t.size()+1));//dp[i][j] 表示s中0-i-1 在 t中0-j-1能匹配的最长公共子序列长度for(int i = 0;i<=s.size();i++){dp[i][0] = 0;}for(int j = 0;j<=t.size();j++){dp[0][j] = 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;}
};

115.不同的子序列

文档讲解:代码随想录
视频讲解: 动态规划之子序列,为了编辑距离做铺垫 | LeetCode:115.不同的子序列
状态

  1. dp数组
    dp[i][j] 表示 s中0到i-1 中 出现 t[0] 到 t[j-1]的个数
  2. 递推公式
    同样有两种情况就是 s[i-1] == t[j-1]
    如果相等
  1. 用s[i-1]来匹配,那么此时符合的个数就是dp[i-1][j-1]
  2. 不用s[i-1]来匹配,因为s中可能存在重复的元素使之成立,所以符合的个数就是dp[i-1][j]
    dp[i][j] = dp[i-1][j-1]+dp[i-1][j]

如果不相等,那就只有一种可能不使用s[i-1]来匹配。dp[i][j] = dp[i-1][j]
3. 初始化
dp[i][0] 表示 从s的子串中寻找空字符串的个数 一定 为1
dp[0][j] 表示 从空字符串中寻找t的子串的个数 一定 为0
4. 遍历顺序
从前向后
5. 打印dp

class Solution {
public:int numDistinct(string s, string t) {if(s.size() < t.size()) return 0;//uint64_t 测试数据的长度vector<vector<uint64_t>> dp(s.size()+1,vector<uint64_t>(t.size()+1));for(int i = 0;i<s.size()+1;i++){dp[i][0] = 1;}//对第一行的初始化要跳过两个空字符串的位置 dp[0][0]for(int i = 1;i<t.size()+1;i++){dp[0][i] = 0;}for(int i = 1;i<s.size()+1;i++){for(int j = 1;j<t.size()+1;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/695191.shtml

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

相关文章

简述一下什么是Nginx,它有什么优势和功能?Nginx是如何处理一个HTTP请求的呢?

简述一下什么是 Nginx &#xff0c;它有什么优势和功能&#xff1f; Nginx 是一个 web 服务器和方向代理服务器&#xff0c;用于 HTTP 、 HTTPS 、 SMTP 、 POP3 和 IMAP 协议。因 它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。 Nginx---Ngine X &…

[计网底层小探索]:实现并部署多线程并发Tcp服务器框架(基于生产者消费者模型的线程池结构)

文章目录 一.网络层与传输层协议sockaddr结构体继承体系(Linux体系)贯穿计算机系统的网络通信架构图示: 二.实现并部署多线程并发Tcp服务器框架线程池模块序列化反序列化工具模块通信信道建立模块服务器主体模块任务回调模块(根据具体应用场景可重构)Tips:DebugC代码过程中遇到…

el-table同时固定左列和右列时,出现错误情况

最近遇到一个问题,就是需求是要求表格同时固定序号列和操作列,我们用的是饿了么组件库的el-table,如下图,出现了错误情况: 解决方法就是使用doLayout方法: 如果使用了keep-alive,可以在activated里执行doLayout方法: activated() {this.$nextTick(() => {this.$ref…

【Crypto | CTF】BUUCTF RSA2

天命&#xff1a;密码学越来越难了&#xff0c;看别人笔记都不知道写啥 天命&#xff1a;莫慌&#xff0c;虽然我不会推演法&#xff0c;但我可以用归纳法 虽然我不知道解题的推演&#xff0c;但我可以背公式啊哈哈哈 虽然我不会这题&#xff0c;但是我也能做出来 公式我不知…

机器学习基本概念(李宏毅课程)

目录 一、概念:1、机器学习概念:2、深度学习概念&#xff1a; 二、深度学习中f(.)的输入和输出&#xff1a;1、输入&#xff1a;2、输出&#xff1a; 三、三种机器学习任务&#xff1a;1、Regression回归任务介绍&#xff1a;2、Classification分类任务介绍&#xff1a;3、Stru…

计算以10为底的对数 math.log10(x)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算以10为底的对数 math.log10(x) [太阳]选择题 以下代码的输出结果中正确的是? import math print("【执行】math.log10(10)") print(math.log10(10)) print("【执行】math…

【elasticsearch实战】知识库文件系统检索工具FSCrawler

需求背景 最近有一个需求需要建设一个知识库文档检索系统&#xff0c;这些知识库物料附件的文档居多&#xff0c;有较多文档格式如&#xff1a;PDF, Open Office, MS Office等&#xff0c;需要将这些格式的文件转化成文本格式&#xff0c;写入elasticsearch 的全文检索索引&am…

UniApp中实现微信分享功能:步骤详解与最佳实践

在现代移动开发中&#xff0c;分享功能已成为许多应用的标配。特别是在中国&#xff0c;微信作为最大的社交平台&#xff0c;其分享功能对于应用的推广和用户互动至关重要。本文将详细介绍如何在UniApp中实现微信分享功能&#xff0c;包括分享链接到微信好友&#xff0c;并显示…

进度条小程序

文章目录 铺垫回车换行缓冲区概述强制冲刷缓冲区 简单实现倒计时功能进度条小程序版本一实例代码效果展示分析 版本二 铺垫 回车换行 回车和换行是两个独立的动作 回车是将光标移动到当前行的最开始&#xff08;最左侧&#xff09; 换行是竖直向下平移一行 在C语言中&…

怿星科技测试实验室(EPT LABS)服务介绍

据中国汽车工业协会数据&#xff0c;2023年我国汽车产销量分别达3016.1万辆和3009.4万辆&#xff0c;年产销量双双创历史新高&#xff0c;汽车行业进入了新时代。新汽车时代下的OEM竞争更激烈&#xff0c;汽车电子架构更复杂&#xff0c;研发周期更短&#xff0c;软件迭代更快&…

VSCODE中使用Django处理后端data和data models

链接&#xff1a; Python and Django tutorial in Visual Studio Code MVC的理解 在实际的程序中采用MVC的方式进行任务拆分。 Model&#xff08;模型&#xff09;负责封装应用程序的数据和业务逻辑部分。Model包含数据结构&#xff0c;数据处理逻辑以及相关的操作方法&#…

NetSuite 中Inventory Adjustment批次物料CSV导入分析二

上一篇最后我们有一个遗留问题是说&#xff0c;调增和调减的操作是否能在一个CSV导入模版中进行操作&#xff0c;经过测试后发现&#xff0c;是可以的&#xff0c;只是External ID需要在设置的时候注意对应好就OK。这里建议大家先查看上一篇文章&#xff0c;因为有一些完全重复…

Day14-Linux系统基础权限知识精讲

Day14-Linux系统基础权限知识精讲 1. chattr2. Linux系统权限。2.1 基础权限介绍2.2 画图讲解2.3 文件和目录权限细节总结2.4 建环境测试2.5 数字权限设置2.6 字符权限设置 给文件加特殊属性&#xff0c;实现特殊功能的命令。 1. chattr a 只能追加内容&#xff0c;不能删除。…

UE蓝图 入口(FunctionEntry)节点和源码

系列文章目录 UE蓝图 Get节点和源码 UE蓝图 Set节点和源码 UE蓝图 Cast节点和源码 UE蓝图 分支(Branch)节点和源码 UE蓝图 入口(FunctionEntry)节点和源码 文章目录 系列文章目录一、FunctionEntry节点功能二、入口节点用法1. 创建函数2. 命名函数3. 定义参数4. 编写函数逻辑5…

Git合并固定分支的某一部分至当前分支

在 Git 中&#xff0c;通常使用 git merge 命令来将一个分支的更改合并到另一个分支。如果你只想合并某个分支的一部分代码&#xff0c;可以使用以下两种方法&#xff1a; 1.批量文件合并 1.1.创建并切换到一个新的临时分支 首先&#xff0c;从要合并的源分支&#xff08;即要…

C++面向对象程序设计-北京大学-郭炜【课程笔记(四)】

C面向对象程序设计-北京大学-郭炜【课程笔记&#xff08;四&#xff09;】 1、this指针1.1、this指针的作用1.2、this指针和静态成员函数 2、静态成员变量和静态成员函数2.1、基本概念2.2、基本概念总结2.3、如何访问静态成员2.4、静态成员变量的使用场景&#xff08;重要&…

Qt中常见的JS类和函数(一)

相关系列文章 Qt中字符串转换为JS的函数执行 目录 1.引言 2.全局对象(The Global Object) 2.1.值属性(Value Properties) 2.1.1.NaN 2.1.2.Infinity 2.1.3.undefined 2.2.函数属性(Function Properties) 2.2.1.eval(x) 2.2.2.parseInt(string, radix) 2.2.3.parseFl…

浏览器---浏览器/http相关面试题

1.localStorage和sessionStorage 共同点&#xff1a;二者都是以key-value的键值对方式存储在浏览器端&#xff0c;大小大概在5M。 区别&#xff1a; &#xff08;1&#xff09;数据有效期不同&#xff1a;sessionStorage仅在当前浏览器窗口关闭之前有效&#xff1b;localStorag…

wps电子表格(xlsx)在excel打开时,多余图形(shapes)的处理

背景&#xff1a; 1. win10, excel 打开 wps 生成的 xlsx文档&#xff1b; 2. 文档中有多余的图形,经检测为shape大类&#xff1b; 3. 文档中可见的图形可以全选后删除&#xff1b; 但是不可见部分仍然存在&#xff1b; 4. vba删除时&#xff0c;可以直接循环删除&#xff…

Eigen:Vector3d 变量初始化遇到的问题

Eigen:Vector3d 变量初始化遇到的问题 2024.2.22 日 &#xff0c;在使用 Eigen:Vector3d 这个类型的 变量&#xff0c;在类中进行初始化时 遇到了如下问题&#xff1a; 首先在类的声明内部&#xff0c;是不能声明完&#xff0c;再给变量赋值的&#xff0c;不管是 Eigen:Vector…