当前位置: 首页 > news >正文

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

目录

  • 392.判断子序列
    • 思路
    • 代码
  • 115.不同的子序列
    • 思路
    • 代码

392.判断子序列

Leetcode

在这里插入图片描述

思路

  1. dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]
  2. 递推公式:
    在这里插入图片描述
  3. 初始化:为0
  4. 遍历顺序:从上到下,从左到右
  5. 举例:输入:s = “abc”, t = “ahbgdc”,dp状态转移图如下:在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

代码

class Solution:def isSubsequence(self, s: str, t: str) -> bool:dp = [[0] * (len(t) + 1) for _ in range(len(s) + 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] + 1else:dp[i][j] = dp[i][j - 1]return dp[-1][-1] == len(s)
  • 时间复杂度:O(n × m)
  • 空间复杂度:O(n × m)

115.不同的子序列

Leetcode

在这里插入图片描述

思路

  1. dp[i][j]:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]。
  2. 递推公式:
    • 当s[i - 1] 与 t[j - 1]相等时dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j]
    • 当s[i - 1] 与 t[j - 1]不相等时,dp[i][j]只有一部分组成,不用s[i - 1]来匹配(就是模拟在s中删除这个元素),即:dp[i - 1][j], 所以递推公式为:dp[i][j] = dp[i - 1][j]
  3. 初始化:从递推公式中看出,左上方和上方是需要初始化的,dp[i][0] 和dp[0][j]是一定要初始化的。dp[i][0] = 1, dp[0][j] = 0, dp[0][0] = 1。
    在这里插入图片描述
    在这里插入图片描述
  4. 遍历顺序:从上到下,从左到右
  5. 举例推导:以s:“baegg”,t:"bag"为例,推导dp数组状态如下:
    在这里插入图片描述

代码

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] = 1for 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] + dp[i - 1][j - 1]else:dp[i][j] = dp[i - 1][j]return dp[-1][-1]
  • 时间复杂度:O(n × m)
  • 空间复杂度:O(n × m)
http://www.lryc.cn/news/182619.html

相关文章:

  • 【国漫逆袭】人气榜,小医仙首次上榜,霍雨浩排名飙升,不良人热度下降
  • 国庆中秋特辑(七)Java软件工程师常见20道编程面试题
  • 长剖与贪心+树上反悔贪心:1004T4
  • 二叉树经典例题
  • 什么是指针的指针和指向函数的指针?
  • 多个excel合并
  • Integrity Plus for Mac,保障网站链接无忧之选
  • C#,数值计算——Sobol拟随机序列的计算方法与源程序
  • 以太网协议介绍(ARP、UDP、ICMP、IP)
  • 【C++】STL详解(十)—— 用红黑树封装map和set
  • Android学习之路(17) Android Adapter详解
  • 实验室超声波萃取技术的原理和特点是什么?
  • 用Python操作Word文档,看这一篇就对了!
  • 力扣 -- 879. 盈利计划(二维费用的背包问题)
  • 虚拟机的三种网络连接模式
  • SQL调优
  • python写一个开机启动的选项
  • 1500*A. Boredom(DP)
  • 小程序关键词排名:优化你的应用在搜索中的地位
  • OpenGLES:3D立方体纹理贴图
  • 线程的概述
  • 竞赛选题 机器视觉目标检测 - opencv 深度学习
  • python绘图系统27:matplotlib中平面坐标、极坐标和三维坐标的所有绘图函数
  • 国庆中秋宅家自省: Python在Excel中绘图尝鲜
  • 计算机中的进制转换
  • Oracle统计信息问题排查常用SQL
  • css圣杯布局和双飞翼布局
  • 机器学习笔记 - 深入研究spaCy库及其使用技巧
  • 网站强制跳转至国家反诈中心该怎么办?怎么处理?如何解封?
  • 2023年10月4日