代码随想录算法训练营第五十八天_第九章_动态规划 | 392.判断子序列、115.不同的子序列

news/2024/11/24 1:33:12/

LeetCode 392.判断子序列

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

视频讲解icon-default.png?t=N0U7https://www.bilibili.com/video/BV1tv4y1B7ym/?spm_id_from=333.788&vd_source=f98f2942b3c4cafea8907a325fc56a48文章讲解https://programmercarl.com/0392.%E5%88%A4%E6%96%AD%E5%AD%90%E5%BA%8F%E5%88%97.html

  • 思路:
    • dp数组含义:
      • dp[i][j]:s的子串[0, i - 1]t的子串[0, j - 1] 的最长公共子序列的长度
    • 递推公式:
      • s[i - 1] 与 t[j - 1]相同:dp[i][j] = dp[i - 1][j - 1] + 1;
      • s[i - 1] 与 t[j - 1]不同:dp[i][j] = dp[i][j - 1];
      • 注意与LeetCode 1143.最长公共子序列的区别:

        1143如果text1[i - 1]与text2[j - 1]不匹配,可以:
        1. text1删末位 与 text2👉dp[i -1][j]
        2. text1 与 text2删末位👉dp[i][j - 1]
      • 本题只用维护 s 与 t删末位👉dp[i][j - 1](维护 s删末位 与 t 没有意义,反正是false)
    • 初始化:全0
      • s[0, i-1]和空串的最长公共子序列是0👉dp[i][0] = 0
      • 同理dp[0][j] = 0
    • 遍历顺序:从上到下,从左到右
    • 最终结果:dp[text1.size()][text2.size()] == s.size()
  • 代码:
// 动态规划:
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;}
};
// 时间复杂度:O(n × m)
// 空间复杂度:O(n × m)
// 双指针
class Solution {
public:bool isSubsequence(string s, string t) {int count = 0;for (int i = 0; i < t.size(); ++i) {if (s[count] == t[i]) {++count;}}if (count == s.size()) return true;return false;}
};
// 时间复杂度:O(m)
// 空间复杂度:O(1)

LeetCode 115.不同的子序列

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

视频讲解icon-default.png?t=N0U7https://www.bilibili.com/video/BV1fG4y1m75Q/?spm_id_from=333.788&vd_source=f98f2942b3c4cafea8907a325fc56a48文章讲解https://programmercarl.com/0115.%E4%B8%8D%E5%90%8C%E7%9A%84%E5%AD%90%E5%BA%8F%E5%88%97.html

  • 思路:
  • 代码:


http://www.ppmy.cn/news/21652.html

相关文章

linux secure boot(安全启动)下为内核模块签名

文章目录linux secure boot(安全启动)下为内核模块签名背景Secure Boot安全启动开启关闭方法内核驱动签名生成签名证书和私钥导入签名证书BIOS(UEFI)导入证书(重要)制作带签名的驱动参考linux secure boot(安全启动)下为内核模块签名 背景 随着计算机性能和存储空间的提升&am…

移动出行2023:聊以新颜待今朝

兔年春节期间&#xff0c;城市再现浓浓烟火气。预订全满的年夜饭、排不到号的奶茶店以及火爆的电影票房等&#xff0c;证明着“吃、游、购、娱”等需求集中释放的“威力”。根据国家税务总局发布的最新数据&#xff0c;今年春节假期&#xff0c;全国消费相关行业销售收入与上年…

Maven实战-5.可继承的POM元素

在Maven继承和聚合中&#xff0c;哪些POM元素可以被继承呢&#xff1f;下面列一个完整的列表&#xff0c;并附带了简单的说明&#xff1a; groupId&#xff1a;项目组ID&#xff0c;项目坐标的核心元素&#xff1b;version&#xff1a;项目版本&#xff0c;项目坐标的核心元素…

机器学习常见面试问题汇总

文章目录 1. 偏差与方差1.1 导致偏差和方差的原因1.2 深度学习中的偏差与方差1.3 偏差与方差的权衡(过拟合与模型复杂度的权衡)2. 生成模型与判别模型3. 先验概率与后验概率4. 超参数选择4.1 Grid Search4.2 Random Search4.3 相关库5. 余弦相似度(Cos距离)与欧氏距离的区别…

孙子兵法总结

孙子兵法总结 兵者&#xff0c;国之大事&#xff0c;死生之地&#xff0c;存亡之道&#xff0c;不可不察也。 多算胜&#xff0c;少算不胜&#xff0c;而况于无算乎。 算&#xff1a;分析&#xff0c;计算 车杂而乘之&#xff0c;卒善而养之&#xff0c;是谓胜敌而益强 敌…

nginx+uwsgi部署django项目

nginxuwsgi部署django项目 1. python3.9环境安装 安装依赖 yum install zlib zlib-devel libffi-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make wget下载源码 官网地址 wget https://www.python.org/ftp/python/3.9.6/Pyt…

STL使用方法(C++)

目录 1 前言 2 迭代器 2.1 访问第一个元素 2.2 访问最后一个元素的下一个元素 2.3 遍历方法 2.3.1 while 2.3.2 for&#xff08;最常用&#xff09; 2.4 适用性 3 基本数据结构 3.1 vector&#xff08;动态数组&#xff09; 3.1.1 insert&#xff08;插入…

边缘检测与角点检测(模式识别与图像处理课程作业)

边缘检测与角点检测&#xff08;模式识别与图像处理课程作业&#xff09;一、边缘检测1.1、读取图像1.2、图像转换成灰度图像1.3、Sobel算子1.4、Canny算子1.5、显示正常中文的标签1.6、边缘检测结果二、角点检测2.1、读取图像2.2、图像转换成灰度图像2.3、Harris算子2.4、设置…