算法随想录算法训练营第四十五天|392.判断子序列 115.不同的子序列

2023-10-29 09:44

本文主要是介绍算法随想录算法训练营第四十五天|392.判断子序列 115.不同的子序列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

392.判断子序列 

题目:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace""abcde"的一个子序列,而"aec"不是)。

class Solution {public boolean isSubsequence(String s, String t) {if(s.length() == 0)return true;char[] s1 = s.toCharArray();char[] t1 = t.toCharArray();int index = 0;for(int i = 0;i<t.length();i++){if(s1[index] == t1[i]){index++;}if(index>=s.length())break;}return index >= s.length()?true:false;}
}

115.不同的子序列  

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

思路:首先定义一个二维数组,我认为动态规划的题是关键点需要明白dp[i][j] 代表什么,这题的dp[i][j] 代表着 t 字符串的前 i 个字符可以由 s 字符串的前 j 字符组成的最多个数。

第一种情况:t 字符串下标为 i 所对应的字符等于 s 字符下标为 j 所对应的字符时:

① 使用新加入的 j 所对应的字符匹配,方案有 dp[i-1][j-1] 种(我认为可以理解为01背包中取物品的情况)

② 不使用新加入的 j 所对应的字符匹配,方案有 dp[i][j-1] 中(可以理解为01背包中取物品的情况)

即 dp[i][j] = dp[i-1][j-1]+dp[i][j-1];

第二种情况:t 字符串下标为 i 所对应的字符不等于 s 字符下标为 j 所对应的字符时,此时

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

class Solution {public int numDistinct(String s, String t) {int len1 = t.length();int len2 = s.length();int[][] dp = new int[len1+1][len2+1];for(int i = 0;i<len2;i++){dp[0][i] = 1; }for(int i = 1;i<=len1;i++){for(int j = 1;j<=len2;j++){if(t.charAt(i-1) == s.charAt(j-1)){dp[i][j] = dp[i-1][j-1]+dp[i][j-1];//dp[i-1][j-1] 取的情况,dp[i][j] 不取的情况}else{dp[i][j] = dp[i][j-1]; }}}return dp[len1][len2];}
}

这篇关于算法随想录算法训练营第四十五天|392.判断子序列 115.不同的子序列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/299814

相关文章

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

Python如何判断字符串中是否包含特殊字符并替换

《Python如何判断字符串中是否包含特殊字符并替换》这篇文章主要为大家详细介绍了如何使用Python实现判断字符串中是否包含特殊字符并使用空字符串替换掉,文中的示例代码讲解详细,感兴趣的小伙伴可以了... 目录python判断字符串中是否包含特殊字符方法一:使用正则表达式方法二:手动检查特定字符Pytho

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa