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

算法day55|392,115

392.判断子序列

class Solution:
    def isSubsequence(self, s: str, t: str) -> bool:
        #定义dp数组,dp[i][j],i为s,j为t
        dp = [[0 for _ in range(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]+1
                else:
                    dp[i][j] = dp[i][j-1]
        if dp[-1][-1] == len(s):
            return True
        return False

dp数组的含义dp[i][j]

i-1的字符串s的子序列。j-1的字符串t的子序列。dp[i][j]代表相同子序列的长度。

递归公式

分两种情况:当s[i-1] == t[j-1]的时候,dp[i-1][j-1]前面的长度的集合+1

当s[i-1] != t[j-1]的时候,删除t,那么剩下的就是s-1和t-2 开始比较,dp= dp[i][j-1]

初始化

初始化为0,因为有可能没有相同子序列。

如果最后的长度与s字符串的相等的话,说明是true

代码随想录

115.不同的子序列

dp数组的定义

这个dp数组的定义都很难。

dp[i][j]是以i-1为结尾的s子序列中出现以j-1为结尾为1的t的个数为dp[i][j]

就是说,假设s 中"b"匹配t中的“b",看有多少个。

递归公式

如果s[i-1]和t[j-1]相等,

可以由两个部分组成,第一个部分是使用s[i-1]来匹配。

dp[i][j] = dp[i-1][j-1]

为什么不是不用加一呢?????不是又匹配上了吗?

第二个是不使用s[i-1]来匹配。dp[i-1][j]跳了下一个匹配。

s[i-1]和t[j-1]不相等:

只能跳下一个匹配

所以还是dp[i][j] = dp[i-1][j]

初始化

dp[i][0]代表用空来匹配s,所以都为1.

dp[0][j]代表t匹配空,所以都是为0

dp[0][0],空配空,所以为1

class Solution:
    def numDistinct(self, s: str, t: str) -> int:
        #dp数组,dp[i][j]
        dp = [[0]*(len(t)+1) for _ in range(len(s)+1)]
        #初始化
        for i in range(len(s)):dp[i][0] = 1
        for j in range(1,len(t)):dp[0][j] = 0
        for i in range(1,len(s)+1):
            for j in range(1,len(t)+1):
                if s[i-1] == t[j-1]:
                    #用s[i-1]来匹配,和不用s[i-1]来匹配
                    dp[i][j] = dp[i-1][j-1]+dp[i-1][j]
                else:
                    dp[i][j] = dp[i-1][j]
        return dp[-1][-1]

代码随想录

相关文章:

  • 人工智能安全治理新篇章:《2024人工智能安全治理框架1.0版》深度解读@附20页PDF文件下载
  • 判断当前环境是否为docker容器下
  • 无人机飞手教员组装、调试高级教学详解
  • 随着Batch size增加,最佳learning rate如何选择?
  • 【60天备战软考高级系统架构设计师——第十五天:项目管理——风险管理】
  • sqlite在Windows环境下安装、使用、node.js连接
  • 【微信小程序】实现授权登入---超详细讲解
  • 力扣128. 最长连续序列(哈希表)
  • 【K8s】-- 描述容器中 pod 的状态
  • 【深度学习】Pytorch教程(八):PyTorch数据结构:2、张量的数学运算(6):高维张量:乘法、卷积(conv2d~四维张量;conv3d~五维张量)
  • 正则表达式中的特殊字符
  • [Mac软件]Adobe Substance 3D Stager 2.1.4 3D场景搭建工具
  • 1 安装部署
  • 提交 bug 的内容书写规范
  • 16含风光水的虚拟电厂与配电公司协调调度模型(场景削减MATLAB程序)
  • Linux中find用法示例
  • 能源监控管理系统|瑜岿科技
  • RV1126笔记五:人脸识别方案<三>
  • 基于Python的Flask WEB框架实现后台权限管理系统(含数据库),内容包含:用户管理、角色管理、资源管理和机构管理
  • MySQL面试常问问题(锁 + 事务) —— 赶快收藏
  • Java进阶—JUC编程
  • 机器学习之模型调优
  • 为行业赋能 助力行业客户业务大放异彩
  • docker 搭建 Nuget 服务器,CentOS,宝塔面板
  • ubuntu:自动加载第三方设备驱动
  • 155. SAP Smart Table 的 Personalization(个性化配置)
  • Redis高级篇之最佳实践
  • 百度工程师教你玩转设计模式(装饰器模式)
  • 深度!用“极速统一”,开启金融行业数据分析新范式
  • lvm 制作
  • 【方案开发】医用级人体体温计额温仪方案
  • 使用mpdf生成pdf文件