力扣题解(不同的子序列)

115. 不同的子序列

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

思路:

本题研究的是t在s中出现的次数,注意t一定是小的那个,是s的子串。

dp[i][j]表示t的(0-i)位置的子串由s的(0-j)位置子串所表示的所有 可能。

则此时dp[i][j]需要分成两种情况,一种是包含s[j]的数值,一种是不包含s[j]的数值(之所以这么做,和题目要求是有关的,因为本题要的是所有出现次数,则包含s[j]出现次数一定和不包含s[j]出现次数不重叠,且二者可以表示所有可能,因此这么设计)则此时若包含s[j],则必须由t[i]=s[j],不然s[j]是一定不包含的(因为此时t[i]是一定要被表示的,且是最末尾的一个字符,而s[j]也是最末尾一个字符,二者必须相同).若不包含s[j],则是由s的(0-j-1)来表示t的(0-i).

故dp[i][j]=dp[i][j-1]+dp[i-1][j-1](若数值相同才加这一部分)。

初始时,当i=0,则表示s要表示空串,则一定有且只有一种表示方式(因为s不管是不是空,也只能提出来一个空串)。

在处理这种类似可以组成的所有可能时,一般都利用动态规划,因为再额外加一个字符的所有可能一定是与不加这个字符的可能有关。再者,对于求所有数目,一般初始化需要注意,因为一般不能是默认值零,因为后面加一个字符时的数目一般是用“+=”,而不是常见的xx+k(k是个常数),所以若开始初始化是0,则很有可能所有可能全是0,根本无法出现累加的情况(累加是对各种可能的加合,而全是0则没办法往上走)。

对于同时考虑两个字符串的题,一般是用多维,一维表示一个字符串。不能用一维表示,因为一维无法同时保存太多的信息,只能对一个字符串的某些信息存储,而会忽略对另一个字符串的信息的保存。

再者,需要考虑dp[i][j]的意义,此处dp[i][j]常见的就是表示(0-i),(0-j)的什么,或者表示i到j的什么,具体跟题目要求有关,但一般dp[i][j]求解都是需要和i,j位置元素挂钩的,有时也可能只和其中一个元素挂钩,但无论怎么样,一般都是会将情况分成两种分别探讨,化成两种的好处是清新且方便,若是化成多种情况很容易出现混乱,重叠。

class Solution {
public:int numDistinct(string s, string t) {int n1=t.size();int n2=s.size();vector<vector<long long>>dp(n1+1,vector<long long>(n2+1,0));for(int j=0;j<=n2;j++)dp[0][j]=1;for(int i=1;i<=n1;i++){for(int j=1;j<=n2;j++){dp[i][j]+=dp[i][j-1];int k=0;if(t[i-1]==s[j-1])k=dp[i-1][j-1];dp[i][j]+=k;}}return dp[n1][n2];}
};

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

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

相关文章

25届平安产险校招测评IQ新16PF攻略:全面解析与应试策略

尊敬的读者&#xff0c;您好。随着平安产险校招季的到来&#xff0c;许多应届毕业生正积极准备着各项测评。本文旨在提供一份详尽的测评攻略&#xff0c;帮助您更好地理解平安产险的校招测评流程&#xff0c;以及如何有效应对。 25届平安产险平安IQ&#xff08;新&#xff09;测…

AI大模型探索之旅:深潜大语言模型的训练秘境

在人工智能的浩瀚星空中&#xff0c;大语言模型无疑是最耀眼的星辰之一&#xff0c;它们以无与伦比的语言理解与生成能力&#xff0c;引领着智能交互的新纪元。本文将带您踏上一场探索之旅&#xff0c;深入大语言模型的训练秘境&#xff0c;揭开其背后复杂而精妙的全景画卷。 …

Java常用API---Object类

Object类概述 概述 Object类是所有类的父类&#xff0c;任何一个类的对象(包括数组)&#xff0c;都可以调用Object类的方法 目标: 掌握Object类的常用方法 常用方法&#xff1a; boolean equals(Object obj)&#xff1a;判断当前对象是否与参数对象"相等" Strin…

Linux时间查看和设置

查看时间 date 命令&#xff0c;输出 Sun Jul 14 07:23:03 PM CST 2024timedatectl 命令&#xff0c;输出 Local time: Sun 2024-07-14 10:30:00 CSTUniversal time: Sun 2024-07-14 02:30:00 UTCRTC time: Sun 2024-07-14 02:30:00Time zone: Asia/Shanghai (CST, 0800) Sys…

汇编学习基础知识【记录】

前言 又是快乐的学习汇编的一天&#xff0c;时间如白驹过隙&#xff0c;抓紧时间&#xff0c;在学习能力最好的年纪多学习一些知识&#xff0c;朝着美好生活而奋斗&#xff01;哈哈哈 参考文章&#xff1a; https://blog.csdn.net/Z_H_Z_0/article/details/106574292 知识补…

给 「大模型初学者」 的 LLaMA 3 核心技术剖析

编者按&#xff1a; 本文旨在带领读者深入了解 LLaMA 3 的核心技术 —— 使用 RMSNorm 进行预归一化、SwiGLU 激活函数、旋转编码&#xff08;RoPE&#xff09;和字节对编码&#xff08;BPE&#xff09;算法。RMSNorm 技术让模型能够识别文本中的重点&#xff0c;SwiGLU 激活函…

现在有哪些微服务解决方案?

Dubbo&#xff1a;是一个轻量级的Java微服务框架&#xff0c;最初由阿里巴巴在2011年开源。它提供了服务注册与发现、负载均衡、容错、分布式调用等。Dubbo更多的被认为是一种高性能的RPC框架&#xff08;远程过程调用&#xff09;&#xff0c;一些服务治理功能依赖第三方组件完…

以一个springboot项目中创建用户会话的业务背景来说明threadlocal的用法

在Spring Boot项目中&#xff0c;ThreadLocal 是一个非常有用的工具&#xff0c;特别是在处理用户会话信息时。ThreadLocal 允许你在同一个线程中存储和访问变量&#xff0c;而不会与其他线程的变量发生冲突。这对于存储用户会话信息、请求上下文等非常有用。 以下是一个示例&…

第一部分:C++入门

目录 前言 1、C关键字(C98) 2、命名空间 2.1、命名空间定义 2.2、命名空间的使用 3、C输入&输出 4、缺省参数 4.1、缺省参数的概念 4.2、缺省参数的分类 5、函数重载 5.1、函数重载的概念 5.2、C支持函数重载的原理 6、引用 6.1、引用的概念 6.2、引用特性 …

Unity与Unreal Engine:AR建筑应用开发之选

在AR技术的浪潮中&#xff0c;建筑行业正迎来一场技术革新。对于希望为建筑工人开发AR应用的创业者来说&#xff0c;选择正确的开发平台至关重要。本文将基于社区讨论&#xff0c;深入分析Unity与Unreal Engine两款引擎在AR施工应用中的优劣&#xff0c;为开发者提供决策参考。…

深圳晶彩智能JC3636W518C开箱实现电脑副屏功能

深圳晶彩智能发布了JC3636W518C 这是一款中国制造的&#xff0c;铝合金外壳&#xff0c;价格非常震撼的开发板。原创是billbill的up播主萨纳兰的黄昏设计的ESP32太极小派&#xff0c;由深圳晶彩智能批量生产。 该款 LCD 模块采用 ESP32-S3R8 芯片作为主控,该主控是双核 MCU&…

LightDM和SDDM显示管理器学习小知识

LightDM和SDDM是两种不同的显示管理器&#xff08;Display Manager&#xff09;&#xff0c;它们可以与多种Linux桌面环境配合使用。以下是它们常见的对应关系&#xff1a; ### LightDM LightDM是一个跨桌面的显示管理器&#xff0c;它允许用户选择不同的桌面环境。以下是一些…

C++入门基础篇(2)

欢迎大家的来到小鸥的博客&#xff0c;今天我们继续C基础的第二篇吧&#xff01; 这也是入门基础篇的最后一篇wo~ 目录 1.引用 引用的概念 引用的特性及使用 const常引用 指针和引用的关系 2.inline内联函数 定义 相关特性及使用​ 3.nullptr >>后记<< …

摩尔投票算法

文章目录 什么是摩尔投票算法算法思想 相关例题摩尔投票法的扩展题目解题思路代码奉上 什么是摩尔投票算法 摩尔投票法&#xff08;Boyer-Moore Majority Vote Algorithm&#xff09;是一种时间复杂度 为O(n),空间复杂度为O(1)的方法&#xff0c;它多数被用来寻找众数&#xf…

深入理解Symfony框架中的数据验证机制

Symfony是一个高度灵活的PHP Web应用框架&#xff0c;它提供了一整套工具和实践来帮助开发者构建复杂的Web应用。数据验证是确保应用数据完整性和安全性的关键环节。在Symfony中&#xff0c;数据验证是通过一系列的组件和方法来实现的&#xff0c;这些组件和方法遵循DRY&#x…

Manim的代码练习02:在manim中Dot ,Arrow和NumberPlane对象的使用

Dot&#xff1a;指代点对象或者表示点的符号。Arrow&#xff1a;指代箭头对象&#xff0c;包括直线上的箭头或者向量箭头等。NumberPlane&#xff1a;指代数轴平面对象&#xff0c;在Manim中用来创建包含坐标轴的数学坐标系平面。Text&#xff1a;指代文本对象&#xff0c;用来…

Linux系列--命令详解

目录 一、Linux资源管理方式 二、查询类型命令详解 三、文件管理类型命令详解 四、文件压缩与解压 五、文件编辑 六、系统命令 七、文件内容查看命令 一、Linux资源管理方式 linux操作系统采用一个文档树来组织所有的资源。这棵树的根目录的名字叫做&#xff1a;//…

使用 HttpServlet 接收网页的 post/get 请求

前期工作&#xff1a;部署好 idea 和 一个 web 项目 idea(2021),tomcat(9) ->创建一个空的项目 -> 新建一个空的模块 -> 右键单击模块 选择 Add..Fra.. Sup.. -> 勾选Web App...后点击OK -> 点击 file - Project Struc... -> 选择刚刚的模块 -> 点…

Web 性能入门指南-2.0 核心网络性能指标LCP、INP、CLS

Largest Contentful Paint、Interaction to Next Paint 和 Cumulative Layout Shift 是前端性能优化和用户体验评估中的重要指标&#xff0c;以下是它们的英文缩写及中文含义&#xff1a; 最大内容绘制 (LCP) 英文缩写&#xff1a;Largest Contentful Paint&#xff0c;LCP …

Linux - 基础开发工具(yum、vim、gcc、g++、make/Makefile、git)

目录 Linux软件包管理器 - yum Linux下安装软件的方式 认识yum 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 vim命令模式各命令汇总 vim底行模式各命令汇总 vim的简单配置 Linux编译器 - gc…