代码随想录第58天(动态规划):● 392.判断子序列 ● 115.不同的子序列

news2024/11/17 9:59:46

一、判断子序列

题目描述:

 思路和想法:

        这道题目还是最长公共子序列的拓展,只是这里进行删除的一定是t字符串,当不相等时,dp[i][j] = dp[i][j - 1];其余基本一致。当最长公共子序列个数等s.size()时,返回true;● 1143.最长公共子序列 

#include<string>
#include<vector>
using namespace std;

class Solution {
public:
    bool isSubsequence(string s, string t) {
        if(s.size() == 0) return true;
        if(s.size() > t.size()) return false;
        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{
                    //删除元素一定是t字符串
                    dp[i][j] = dp[i][j - 1];
                }
                if(dp[i][j] == s.size()) return true;
            }
        }
        return false;
        
    }
};

二、不同的子序列

题目描述:

思路和想法:

(1)dp[i][j] : 以i - 1为结尾的s中有j - 1为尾的t的个数。

(2)当(s[i - 1] == j[i - 1])时,dp[i][j] = dp[i  - 1][j  - 1] + dp[i - 1][j];当(s[i - 1] != j[i - 1])时,dp[i][j] = dp[i - 1][j]。

这里要注意dp数组的定义

(1)vector<vector<int>> dp(s.size() + 1, vector<int>(t.size() + 1,0));会出现溢出的情况

(2) vector<vector<uint64_t>> dp(s.size() + 1, vector<uint64_t>(t.size() + 1,0));

#include<vector>
#include<string>
using namespace std;

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

         

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

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

相关文章

Leetcode力扣秋招刷题路-0050

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 50. Pow(x, n) 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xn &#xff09;。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&am…

N字形变换-力扣6-java

一、题目描述将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时&#xff0c;排列如下&#xff1a;P A H NA P L S I I GY I R之后&#xff0c;你的输出需要从左往右逐行读…

大神之路-起始篇 | 第11章.计算机科学导论之【数据压缩】学习笔记

欢迎关注「全栈工程师修炼指南」公众号点击 &#x1f447; 下方卡片 即可关注我哟!设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01;涉及 企业运维、网络安全、应用开发、物联网、人工智能、大数据 学习知识“ 花开堪折直须折&#xff0c;莫待无花空折…

【深度学习】卷积神经网络

1 卷积神经网络&#xff08;CNN&#xff09;可以做什么&#xff1f; 检测任务分类与检索超分辨率重构&#xff1a;将图像训练的更清晰医学任务等无人驾驶人脸识别 2 用GPU&#xff1a;图像处理单元 比CPU块一百倍以上 3 卷积神经网络与传统神经网络的区别 传统神经网络&…

从证券软件开发到大数据开发,薪资涨幅一倍多,我经历了什么?

点击上方 "大数据肌肉猿"关注, 星标一起成长点击下方链接&#xff0c;进入高质量学习交流群今日更新| 1052个转型案例分享-大数据交流群分享学习群一位同学的大数据转型经历&#xff0c;他17年毕业后培训了几个月去了杭州一家证券公司做外包&#xff0c;用的是古老的…

有限元分析学习一

系列文章目录 有限元分析学习一 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、有限元方法的简单介绍1.1 有限元的基础概念1.2 有限元软件发展历史1.3 有限元软件二、弹性力学的简单介绍2.1.…

【Spring】注解实现IOC操作,你理解了吗?

作者&#xff1a;狮子也疯狂 专栏&#xff1a;《spring开发》 坚持做好每一步&#xff0c;幸运之神自然会驾凌在你的身上 专栏推荐&#xff1a;写文章刚刚起步&#xff0c;各个专栏的知识点后续会补充完善&#xff0c;不断更新好文&#xff0c;希望大 家支持一下。 专栏名字El…

jetson nano(ubuntu)安装ninja

文章目录安装环境安装环境 jetson nano 系统&#xff1a;4.6.1 安装re2c apt-get install re2c检查re2c是否安装成功 re2c --version ![在这里插入图片描述](https://img-blog.csdnimg.cn/847c19f15c2646bda44f6ae73b78509a.png#pic_center)下载ninja源代码 git clone https:/…

和在字节上班的兄弟聊过后,才知道原来年薪40W的测试有这么多?

最近脉脉职言区有一条讨论火了&#xff1a; 哪家互联网公司薪资最‘厉害’&#xff1f; 下面的评论多为字节跳动&#xff0c;还炸出了很多年薪40W的测试工程师 我只想问一句&#xff0c;现在的测试都这么有钱了吗&#xff1f; 前几天还有朋友说&#xff0c;从腾讯跳槽去了字…

(干货教程)在VSCode并使用chatgtp插件编写CC++语言程序

&#xff08;干货教程&#xff09;在VSCode并使用chatgtp插件编写CC语言程序 下载并安装VSCODE 第1步&#xff0c;下载VSCODE https://code.visualstudio.com/Download 第2步&#xff0c;安装VSCODE 安装过程较简单&#xff0c;这里省略。 安装好后效果如图&#xff1a…

(C语言)数据的存储

问&#xff1a;1. 数据类型有哪五大类&#xff1f;2. 数据类型的作用是什么与什么&#xff1f;3. 整型又可以具体分为哪五个&#xff1f;为什么字符char也归属于整型&#xff1f;4. 浮点型又可以具体分为哪两类&#xff1f;5. 构造类型就是什么&#xff1f;具体分为哪四类&…

2.4.8 PCIe——物理逻辑层——REFCLK

一、概述 pcie的参考时钟由板级输入&#xff0c;提供给IP内PHY层的PLL使用&#xff0c;由PLL产生core_clk和pipe_clk。 二、REFCLK产生方式 Serdes 所用时钟由 PHY 模块内的PLL生成&#xff0c;PLL的参考时钟可以由common clock&#xff08;外部背板提供&#xff09;、separ…

栈和队列的OJ练习题

前言 俗话说&#xff1a;熟能生巧&#xff0c;我们在学习完知识&#xff0c;一定要运用&#xff0c;不运用那么他过段时间就忘了&#xff0c;所以大家还是要认真的看一些题 (1)有效的括号 思路&#xff1a;我们可以用栈的知识 将左括号入栈&#xff0c;右括号出栈顶元素然后匹配…

【8】AMBA_SOC项目自学IC验证项目-仿真平台脚本使用讲解

仿真平台文件介绍和脚本使用说明 1、项目路径:2、文件夹说明:3、仿真运行命令:第一步:进入项目路径第二步:设置环境第三步:运行仿真第四步:查看波形1、项目路径: 位置:/tool/project/axi 2、文件夹说明: a、env就是放的我们uvm环境相关的env文件; b、out就是我们…

deque容器,const_iterator

目录 1.deque构造函数&#xff0c;容器中数据不修改的方法&#xff0c;const_iterator​编辑 2.deque赋值&#xff0c;&#xff0c;assign 3.deque大小的操作,empty,size,resize 4.deque容器插入和删除&#xff0c;push_back,push_front,pop_back,pop_front,insert,clear,era…

nginx反向代理+负载均衡上传webshell重难点+apache漏洞

nginx反向代理 nginx 负载均衡 负载均衡的策略 1、轮询&#xff1a;nginx默认就是轮询其权重都默认为1&#xff0c;服务器处理请求的顺序&#xff1a;ABABABABAB… upstream mysvr { server 192.168.137.131; server 192.168.137.136; }2、weight&#xff1a;跟据配置…

从ReentrantLock的实现看AQS的原理及应用

本文转载自&#xff1a;https://tech.meituan.com/2019/12/05/aqs-theory-and-apply.html 作者&#xff1a;美团技术团队 文章目录前言1 . ReentrantLock1.1 ReentrantLock特性概览1.2 Reentrant Lock与AQS的关联2 . AQS2.1 原理概览2.1.1 AQS 数据结构2.1.2 同步状态State2.2 …

数据结构——哈夫曼树编程,输入权值实现流程图代码

一、须知 本代码是在数据结构——哈夫曼树编程上建立的&#xff0c;使用时需将代码剪切到C等软件中。需要输入权值方可实现流程图&#xff0c;但是还需要按照编程换算出的结果自己用笔画出流程图。 下面将代码粘贴到文章中&#xff0c;同时举一个例子&#xff1a;二、代…

ChatGPT留给知乎、小红书的时间不多了

大家好啊&#xff0c;今天我打算给大家整点好活&#xff01;挑战一下用ChatGPT打入各平台内部。 知乎挑战&#xff01; 首先了解一下“知乎体” 知乎体是以专业知识为基础&#xff0c;以清晰的条理对问题进行阐述&#xff0c;并解决该问题的文体格式。对于不能明确给出答案的…

【Linux 信号】信号的产生方式、信号的捕捉的全过程

信号的处理方式是远远比信号的产生当闹钟响了就知道时间到了&#xff0c;说明对应信号处理方法比信号产生更早操作系统的信号处理方法在编写操作系统的时候就已经编写好了signal函数1.1所有的信号1.2 signal函数的概念和简单使用捕捉信号就是自定义对应的信号的处理方法9号信号…