数据结构与算法:动态规划dp:子序列相关力扣题(下):392. 判断子序列、115.不同的子序列

devtools/2025/3/14 14:51:08/

392. 判断子序列

1.套最长公共子序列问题的板子

python">class Solution:def isSubsequence(self, s: str, t: str) -> bool:"""最长公共子序列长度是否=len(s),是就是true,否就是falsedp[i][j]考虑以s[i-1],t[j-1]的最长公共子序列长度"""n = len(s)m = len(t)dp = [[0] * (m+1) for _ in range(n+1)]for i in range(1, n+1):for j in range(1, m+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[n][m]==n

效率:19ms,击败16.26%

代码简单是简单,就是效率太低了。我们不需要使用两重循环来遍历两个字符串,而是直接双指针一起遍历即可。

2.双指针优化

python">class Solution:def isSubsequence(self, s: str, t: str) -> bool:i, j = 0, 0  # 双指针分别指向s和t的起始位置n, m = len(s), len(t)while i < n and j < m:if s[i] == t[j]:i += 1  # 匹配成功,移动s指针j += 1  # 无论是否匹配,都要移动t指针return i == n  # 检查是否匹配完所有s的字符

效率:0ms,击败100.00%

115.不同的子序列(hard)

题目的意思其实就是s如何删除元素能变成t

python">class Solution:def numDistinct(self, s: str, t: str) -> int:"""dp[i][j] = 一直考虑到以s[i-1]结尾的s中有多少子序列能成为一直考虑到以t[j-1]结尾的t"""n = len(s)m = len(t)dp = [[0] * (m+1) for _ in range(n+1)]# 要注意!这里相当于s只有一个元素,t为空字符串时,s有多少子序列能成为空字符串,所以为1for i in range(n+1):dp[i][0] = 1for i in range(1, n+1):for j in range(1, m+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[n][m]

效率:467ms,击败28.72%


http://www.ppmy.cn/devtools/167048.html

相关文章

SQLiteStudio:一款免费跨平台的SQLite管理工具

SQLiteStudio 是一款专门用于管理和操作 SQLite 数据库的免费工具。它提供直观的图形化界面&#xff0c;简化了数据库的创建、编辑、查询和维护&#xff0c;适合数据库开发者和数据分析师使用。 功能特性 SQLiteStudio 提供的主要功能包括&#xff1a; 免费开源&#xff0c;可…

条款1:理解模版性别推导

目录 问题引出 情况1&#xff1a;ParamType是个指针或引用&#xff0c;但不是个万能引用。 情况2&#xff1a;ParamType是个万能引用 情况3&#xff1a;ParamType既非指针也非引用 问题引出 函数模板大致形如&#xff1a; template<typename T> void f(ParamType p…

2025-03-13 禅修-错误的做法

摘要: 2025-03-13 禅修-错误的做法 禅修-错误的做法 我们今天的课程是这个禅修防误。主要是有一些我们所明令禁止的。在整个禅修过程中&#xff0c;会对我们禅修出现一些弊端的这部分&#xff0c;我们会给大家介绍。第一&#xff0c;在禅修中要防止自由联想&#xff0c;防止幻…

django中间件说明

Django中间件是一种在请求和响应处理过程中介入的机制&#xff0c;允许你在视图处理请求之前或之后执行自定义代码。中间件适用于处理全局性任务&#xff0c;如身份验证、日志记录、内容修改等。以下是Django中间件的详细说明和使用方法&#xff1a; 一、中间件的核心概念 作用…

OSPF-2 邻接建立关系

上一期我们说了OSPF的邻居建立关系以及OSPF邻居关系建立中建立失败的因素以及相关实验案例 这一期我们来说说OSPF的邻接关系建立时需要交互哪些报文以及失败因素及原因和相关实验案例 一、概述 在运行了OSPF的网络当中为了交互链路状态信息和路由信息,互相之间需要建立邻接关…

Linux云计算SRE-第二十周

完成ELK综合案例里面的实验&#xff0c;搭建完整的环境 一、 1、安装nginx和filebeat&#xff0c;配置node0(10.0.0.100)&#xff0c;node1(10.0.0.110)&#xff0c;node2(10.0.0.120)&#xff0c;采用filebeat收集nignx日志。 #node0、node1、node2采用以下相同方式收集ngin…

【 <一> 炼丹初探:JavaWeb 的起源与基础】之 JavaWeb 项目的部署:从开发环境到生产环境

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开发环境…

Vue项目搜索引擎优化(SEO)终极指南:从原理到实战

文章目录 1. SEO基础与Vue项目的挑战1.1 为什么Vue项目需要特殊SEO处理&#xff1f;1.2 搜索引擎爬虫工作原理 2. 服务端渲染&#xff08;SSR&#xff09;解决方案2.1 Nuxt.js框架实战原理代码实现流程图 2.2 自定义SSR实现 3. 静态站点生成&#xff08;SSG&#xff09;技术3.1…