day55判断子序列_不同的子序列
力扣392.判断子序列
题目链接:https://leetcode.cn/problems/is-subsequence/
思路
本题和最长公共子序列基本上类似,求得s和t的最长公共子序列,再判断最长公共子序列的长度是否等于s的长度即可。
还有一点不一样的是,在递推公式中,当s.charAt(i-1) != t.charAt(j-1)
时,只需要回退j,也就是说只需要回退字符串t,因为是要判断s是不是t的子序列。
完整代码
class Solution {public boolean isSubsequence(String s, String t) {int[][] dp = new int[s.length()+1][t.length()+1];for (int i = 1; i <= s.length(); i++) {for (int j = 1; j <= t.length(); j++) {if(s.charAt(i-1) == t.charAt(j-1)){dp[i][j] = dp[i-1][j-1] + 1;}else{dp[i][j] = dp[i][j-1];}}}int res = dp[s.length()][t.length()];if(res == s.length()){return true;}else {return false;}}
}
力扣115.不同的子序列
题目链接:https://leetcode.cn/problems/distinct-subsequences/
思路
这道题对于我来说真的有点难度,有点难理解,可能是之前这一系列就没有完全吃透
dp数组的含义
dp[i][j]:以i-1为结尾的字符串s包含以j-1为结尾的字符串t的个数
递推公式
(1)当s.charAt(i-1) == t.charAt(j-1)
时,例如s=bagg,t=bag,s[3]==t[2],有两种情况:考虑当前匹配的字符;不考虑当前的字符,那么s回退,t不可以回退,就是比较s[2]和t[2],还是相等的。所以需要将两种情况相加
(2)不相等时,回退s,不回退t
初始化
由于递推公式的需要,需要初始化dp[i][0],dp[0][j],还有一种特殊情况dp[0][0]
根据dp的定义:
(1)dp[i][0]表示以i-1为结尾的字符串s包含以-1为结尾的字符串t的个数,就是拿s去匹配空字符串,匹配个数为1
(2)dp[0][j]表示以-1为结尾的字符串s包含以j-1为结尾的字符串t的个数,就是拿空字符串去匹配非空,肯定是匹配不上的,所以为0
(3)dp[0][0]表示以-1为结尾的字符串s包含以-1为结尾的字符串t的个数,就是拿空字符串去匹配空字符串,匹配个数为1
遍历顺序
从前向后
打印数组
完整代码
class Solution {public int numDistinct(String s, String t) {int[][] dp = new int[s.length()+1][t.length()+1];for (int j = 1; j < t.length(); j++) {dp[0][j] = 0;}for (int i = 0; i < s.length(); i++) {dp[i][0] = 1;}for (int i = 1; i <= s.length(); i++) {for (int j = 1; j <= t.length(); j++) {if(s.charAt(i-1) == t.charAt(j-1)){dp[i][j] = dp[i-1][j-1] + dp[i-1][j];}else{dp[i][j] = dp[i-1][j];}}}return dp[s.length()][t.length()];}
}
day55判断子序列_不同的子序列相关推荐
- 求序列最长不下降子序列_最长不下降子序列nlogn算法详解
今天花了很长时间终于弄懂了这个算法--毕竟找一个好的讲解真的太难了,所以励志我要自己写一个好的讲解QAQ 这篇文章是在懂了这个问题n^2解决方案的基础上学习. 解决的问题:给定一个序列,求最长不下降子 ...
- 回文子序列_计算回文子序列的总数
回文子序列 Problem statement: 问题陈述: Given a string str, find total number of possible palindromic sub-seq ...
- java最长回文子序列_算法--字符串:最长回文子序列
转自:labuladong公众号 子序列问题是常见的算法问题,而且并不好解决. 首先,子序列问题本身就相对子串.子数组更困难一些,因为前者是不连续的序列,而后两者是连续的,就算穷举都不容易,更别说求解 ...
- java实现最长连续子序列_最长公共子序列 ||
问题:在 前一篇文章 最长公共子序列 | 的基础上要求将所有的最长公共子序列打印出来,因为最长公共子序列可能不只一种. 难点:输出一个最长公共子序列并不难,难点在于输出所有的最长公共子序列,我们需要在 ...
- c 最大子序列和_最大连续子序列
最大连续子序列:是指序列中所有子序列中元素和最大的一个 例如{-2,11,-4,13,-5.-2}中最大连续子序列为{11,-4,13}其和为20 若所有k个元素都为负数,则定义其最大和为0,输出整个 ...
- java最长回文子序列_在一个字符串里面怎么找出最长回文子序列长度
回文字符串是什么?类似于level,noon,abbba这种,就是从左读和从右读都是同一个字符串.... 先说一下我的思路: 比如现在有字符串:"12212321" 1,先在每个字 ...
- 53. 最大子数组和 392.判断子序列 115.不同的子序列
53. 最大子数组和 dp[i]: 0-i-1,包含下标i-1的最大和为dp[i] 若dp[i-1]小于0,则和重新从nums[i]开始计算. 最后返回dp[i]最大值即可 392.判断子序列 i为短 ...
- java实现最长连续子序列_最长公共子序列/最长公共子串 Python/Java实现
关注我的微信公众号:后端技术漫谈 不定期推送关于后端开发.爬虫.算法题.数据结构方面的原创技术文章,以及生活中的逸闻趣事. 我目前是一名后端开发工程师.主要关注后端开发,数据安全,网络爬虫,物联网,边 ...
- java最长公共子序列_技术分享 | 最长公共子序列在比对工具的应用
即使如何1 在实际工作中,我们常常要对输出的文本和数据进行比对:以取证大师为例,取证大师导出的取证结果数据量很容易达到上万条.这类数据特点除了数量级大外,其实数据结构很相近.即使我们以无以伦比的细致和 ...
最新文章
- 虚拟机VMware14安装kali-linux-2019.1-amd64
- LINUX自旋锁详解
- linux病毒sfewfesfs
- C#Redis集合set
- vue 使用sass 和less
- python对话机器人框架_长篇文讲解:使用Python AIML搭建聊天机器人的方法示例(收藏)...
- PowerDesiGner数据库设计
- android短信模板,短信服务 · Android – Bmob后端云
- leetcode971. Flip Binary Tree To Match Preorder Traversal
- 阿里的下一个15年:大数据是核心
- bzoj 4883 [Lydsy1705月赛]棋盘上的守卫——并查集(思路!)
- matlab在xrd中的应用,XRD物相分析(Jade软件的应用).pdf
- android 问题-----Please execute 'adb uninstall com.newland.securityclient' in a shell.
- document.writeln
- 【雅思大作文考官范文】——第十一篇:'homework' essay
- 湖南科技学院计算机代码,湖南科技学院计算机与信息科学系.doc
- intellij idea 2016破解方法
- 手把手教你玩转 Excel 数据透视表
- 某奏云资源网址打不开的N种处理方法(亲测好用)
- Deep Learning读书笔记4---深度模型中的优化
热门文章
- 社区电脑计算机培训即将结束,电脑培训感言(2页)-原创力文档
- GGNMOS ESD保护器件
- 使用线程池优化多线程编程
- Oracle怎么统计clob的行数,Oracle CLOB性能
- linux期中架构文档,Linux期中架构 - osc_jbr77wuo的个人空间 - OSCHINA - 中文开源技术交流社区...
- Mac系统如何进入mysql
- 163888一个普通程序员写给COO李大学的一封Mail(不是转载)
- 三、Git本地仓库基本操作——git仓库忽略跟踪文件
- 计算机组装试卷分析,高中英语试卷分析
- 磁盘及文件系统管理详解