代码随想录Day 47|Leetcode|Python|392.判断子序列 ● 115.不同的子序列

392.判断子序列 

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

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace""abcde"的一个子序列,而"aec"不是)。

进阶:

如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?

致谢:

特别感谢 @pbrother 添加此问题并且创建所有测试用例。

解题思路:

确认dp含义:dp[i][j]以i-1 和j-1结尾的数组相同字符数最大数量

递推公式:当s[i-1] == t[j-1],dp[i][j] = dp[i-1][j-1]+1,else 将t倒退前一位得到dp[i][j-1],这里因为t比s大,在t中判断是否有s,因此s不用倒退一个

初始化:dp[i][0] = 0, dp[0][j] = 0

遍历顺序:从前到后

打印dp数组

class Solution:def isSubsequence(self, s: str, t: str) -> bool:dp = [[0]*(len(t)+1) for _ in range(len(s)+1)]res = 0for 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]res = max(res, dp[i][j])return res==len(s)

 115.不同的子序列 

给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数,结果需要对 109 + 7 取模。

解题思路:

确认dp数组含义:dp[i][j]在i以-1为尾的s子序列中包含了多少个以j-1结尾的t子序列

递推公式:当s[i-1]==t[j-1]时有两种情况,s, t各倒退一个,s倒退一个得到dp[i-1][j]里包含了多少个以j-1为结尾的t子序列。当s[i-1] != t[j-1], dp[i][j] = dp[i-1][j]

初始化:dp[0][j]:空字符串“”中包含了多少个以j-1结尾的t子字符串,0个,dp[i][0],s[i-1]中包含了1个空字符串,dp[0][0] = 1

遍历顺序:从前到后

打印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] = 1dp[0][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-1]+dp[i-1][j]else:dp[i][j] = dp[i-1][j]return dp[len(s)][len(t)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/703392.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可以当回音壁使用的蓝牙条形音箱中应用的蓝牙芯片

条形音箱(英语:Soundbar)是一个有立体声效的音箱,通常放置于屏幕的上方或下方,基于声学的考虑,此种音箱多为长条形设计,故名。无线蓝牙条形音箱也一样,银色磨砂铝合金中框。搭配黑色…

JavaScript基础知识强化:变量提升、作用域逻辑及TDZ的全面解析

🔥 个人主页:空白诗 文章目录 ⭐️ 引言🎯 变量提升(Hoisting)👻 暂时性死区(Temporal Dead Zone, TDZ)解释📦 var声明🔒 let与const声明📖 函数声明 与 函数表达式函数声…

“网络安全新纪元:等保2.0的详细解读与实践”

网络安全等级保护基本要求》(等保2.0)于2019年6月发布,是我国网络安全等级保护制度的一项重要标准。等保2.0主要针对关键信息基础设施的网络安全保护,对数据安全和个人信息保护提出了更高的要求。本文将对等保2.0进行详细解读&…

导电材料——分类、性能与应用

本篇为西安交通大学本科课程《电气材料基础》的笔记。 导电材料指的是能在电场下传导电流的材料。导体价电子所在能带为半满带,且相邻能级间隔小,外电场下电子很容易从低能级跃迁到高能级上,大量的电子很容易获得能量进行共有化运动&#xf…

队列的实现与OJ题目解析

"不是你变优秀了, 那个人就会喜欢你." 文章索引 前言1. 什么是队列2. 队列的实现3. OJ题目解析4. 总结 前言 感情可以培养是个伪命题. 如果有足够多的时间和爱, 就可以让另一个人爱上你的话, 那谁和谁都可以相爱了. 爱情之所以会让人死去活来, 是因为, 答案都写在了…

Skywalking 介绍及应用(从0到1)完整版

微服务全链路追踪 一、APM 系统 APM 系统是可以帮助理解系统行为、用于分析性能问题的工具以便发生故障的时候,能够快速走位和解决问题。 告警规则 SkyWalking 的发行版都会默认提供config/alarm-settings.yml文件,里面预先定义了一些常用的告警规则。…

海外静态IP:全球互联的稳定之选

在全球化的商业环境中,企业与个人对于网络的依赖日益加深,而一个稳定、可靠的海外静态IP成为了连接世界的关键。本文将从五个方面深入探讨海外静态IP的重要性、应用场景、技术优势、市场趋势以及选择时的考量因素。 一、海外静态IP的重要性 静态IP地址是…

DC-DC直流升压线性可调电源模块电压控制输出0-50V/0-80V/0-100V/0-200V/0-250V/0-300V/0-500V/0-1000V

特点 效率高达 75%以上1*2英寸标准封装单电压输出可直接焊在PCB 上工作温度: -40℃~75℃阻燃封装,满足UL94-V0 要求温度特性好电压控制输出,输出电压随控制电压线性变化 应用 GRB 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为:4.5~9V、…

sentinel搭建及使用

1.添加依赖(版本可依赖于父pom) SentinalResource注解: 添加依赖: blockhandler: fallback:

使用 python 整理 latex 的 bib 文献列表

目录 bib 文献整理脚本前提条件与主要功能原理编程语言与宏包基础完整程序 bib 文献整理脚本 本文主要用于解决 Latex 写作过程中遇到的 bib 文献整理问题,可处理中文文献。 LaTeX是一种基于ΤΕΧ的排版系统,它非常适用于生成高印刷质量的科技和数学类…

2024江苏省赛 H. 完蛋,我被房产包围了 【费用流、分时图】

完蛋,我被房产包围了 n ≤ 200 , ∑ n ≤ 1 0 4 n \leq 200, \sum n \leq 10^4 n≤200,∑n≤104 求出最大利润 思路 每个代理商每次买房狂潮只能卖出 1 1 1 套房子,小红卖出一套房子贬值 1 1 1 元,小绿卖出一套房子贬值 ⌈ a i 10 ⌉ \…

vue加密传输,后端获取进行解密。

文章目录 概要Vue前端加密后端进行解密小结 概要 vue界面加密传输,后端获取进行解密,适用于登录时密码加密传输。 Vue前端加密 1.安装jsencrypt包: npm install jsencrypt安装完成后package.json会有jsencrypt依赖 2.引入jsencrypt.js到文…