代码随想录算法训练营Day54 | 392.判断子序列、115.不同的子序列 | Python | 个人记录向

本文目录

392.判断子序列

代码随想录:392.判断子序列
Leetcode:392.判断子序列

做题

借鉴Day53中1143.最长公共子序列的思路,最后改一下判断逻辑即可。

python 复制代码
class Solution:
    def isSubsequence(self, s: str, t: str) -> bool:
        dp = [[0] * (len(s)+1) for _ in range(len(t)+1)]
        for i in range(1, len(t)+1):
            for j in range(1, len(s)+1):
                if t[i-1] == s[j-1]:
                    dp[i][j] = dp[i-1][j-1] + 1
                else:
                    dp[i][j] = max(dp[i][j-1], dp[i-1][j])
        if dp[len(t)][len(s)] == len(s):
            return True
        else:
            return False

时间复杂度:O(n × m)
空间复杂度:O(n × m)

看文章

思路一致。

115.不同的子序列

代码随想录:115.不同的子序列
Leetcode:115.不同的子序列

做题

无思路。

看文章

这道题很难,题解也看了很久。

动规五部曲:

  1. 确定dp数组(dp table)以及下标的含义。

    dpij:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dpij

  2. 确定递推公式。这一类问题,基本是要分析两种情况:

    si - 1 与 tj - 1相等 ,dpij可以有两部分组成。
    一部分是用si - 1来匹配 ,那么个数为dpi - 1j - 1。即不需要考虑当前s子串和t子串的最后一位字母,所以只需要 dpi-1j-1
    另一部分是不用si - 1来匹配,个数为dpi - 1j,相当于复制直接的结果。

    si - 1 与 tj - 1 不相等,dpij只有一部分组成,不用si - 1来匹配(就是模拟在s中删除这个元素),即:dpi - 1j

  3. dp数组如何初始化。

    dpi0:以i-1为结尾的s可以随便删除元素,出现空字符串的个数。那么dpi0一定都是1,因为也就是把以i-1为结尾的s,删除所有元素,出现空字符串的个数就是1。

    dp0j:空字符串s可以随便删除元素,出现以j-1为结尾的字符串t的个数。那么dp0j一定都是0,s如论如何也变成不了t。

  4. 确定遍历顺序。

    外部遍历 s,内部遍历 t。

  5. 举例推导dp数组。

代码如下:

python 复制代码
class Solution:
    def numDistinct(self, s: str, t: str) -> int:
        dp = [[0] * (len(t)+1) for _ in range(len(s)+1)]
        for i in range(len(s)+1):
            dp[i][0] = 1
        for i in range(1, len(s)+1):
            for j in range(1, len(t)+1):
                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[len(s)][len(t)]

以往忽略的知识点小结

  • 回到动规五部曲的基本思路,特别是dp数组的含义

个人体会

完成时间:1h30min。

心得:115.不同的子序列比较难,看了好久,需要回归到动规五部曲的基本思路,特别是dp数组的含义。

相关推荐
名字还没想好☜几秒前
Go 内存逃逸分析:什么时候变量跑到堆上
开发语言·算法·性能优化·golang·go·内存逃逸
li星野3 分钟前
滑动窗口五题通关:从食堂打饭到上下文窗口——算法与大模型的内存管理哲学
算法
Ivanqhz7 分钟前
NFM(神经因子分解机)
开发语言·javascript·人工智能·算法·蓝桥杯
深圳市快瞳科技有限公司8 分钟前
从人工录入到秒级识别:保单OCR识别厂家选型指南
人工智能·算法·计算机视觉·ocr
小欣加油12 分钟前
leetcode1331 数组序号转换
数据结构·c++·算法·leetcode·职场和发展
学究天人16 分钟前
数学公理体系大全:第五章 序数与基数理论:超限算术与集合的大小
人工智能·线性代数·算法·机器学习·数学建模·原型模式
idingzhi17 分钟前
A股量化策略日报(2026年07月12日)
python
阿米亚波18 分钟前
【C++ STL】std::deque
数据结构·c++·笔记·算法·stl
二宝哥27 分钟前
07.Python运算符详解与编码基础
python
巴啦啦小魔仙变身29 分钟前
SIGINT = Signal Interrupte
linux·服务器·python