代码随想录算法训练营第五十八天_第九章_动态规划 | 392.判断子序列、115.不同的子序列
创始人
2024-05-22 14:14:12
0

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> dp(s.size() + 1, vector(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

  • 思路:
  • 代码:

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...