力扣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判断子序列_不同的子序列相关推荐

  1. 求序列最长不下降子序列_最长不下降子序列nlogn算法详解

    今天花了很长时间终于弄懂了这个算法--毕竟找一个好的讲解真的太难了,所以励志我要自己写一个好的讲解QAQ 这篇文章是在懂了这个问题n^2解决方案的基础上学习. 解决的问题:给定一个序列,求最长不下降子 ...

  2. 回文子序列_计算回文子序列的总数

    回文子序列 Problem statement: 问题陈述: Given a string str, find total number of possible palindromic sub-seq ...

  3. java最长回文子序列_算法--字符串:最长回文子序列

    转自:labuladong公众号 子序列问题是常见的算法问题,而且并不好解决. 首先,子序列问题本身就相对子串.子数组更困难一些,因为前者是不连续的序列,而后两者是连续的,就算穷举都不容易,更别说求解 ...

  4. java实现最长连续子序列_最长公共子序列 ||

    问题:在 前一篇文章 最长公共子序列 | 的基础上要求将所有的最长公共子序列打印出来,因为最长公共子序列可能不只一种. 难点:输出一个最长公共子序列并不难,难点在于输出所有的最长公共子序列,我们需要在 ...

  5. c 最大子序列和_最大连续子序列

    最大连续子序列:是指序列中所有子序列中元素和最大的一个 例如{-2,11,-4,13,-5.-2}中最大连续子序列为{11,-4,13}其和为20 若所有k个元素都为负数,则定义其最大和为0,输出整个 ...

  6. java最长回文子序列_在一个字符串里面怎么找出最长回文子序列长度

    回文字符串是什么?类似于level,noon,abbba这种,就是从左读和从右读都是同一个字符串.... 先说一下我的思路: 比如现在有字符串:"12212321" 1,先在每个字 ...

  7. 53. 最大子数组和 392.判断子序列 115.不同的子序列

    53. 最大子数组和 dp[i]: 0-i-1,包含下标i-1的最大和为dp[i] 若dp[i-1]小于0,则和重新从nums[i]开始计算. 最后返回dp[i]最大值即可 392.判断子序列 i为短 ...

  8. java实现最长连续子序列_最长公共子序列/最长公共子串 Python/Java实现

    关注我的微信公众号:后端技术漫谈 不定期推送关于后端开发.爬虫.算法题.数据结构方面的原创技术文章,以及生活中的逸闻趣事. 我目前是一名后端开发工程师.主要关注后端开发,数据安全,网络爬虫,物联网,边 ...

  9. java最长公共子序列_技术分享 | 最长公共子序列在比对工具的应用

    即使如何1 在实际工作中,我们常常要对输出的文本和数据进行比对:以取证大师为例,取证大师导出的取证结果数据量很容易达到上万条.这类数据特点除了数量级大外,其实数据结构很相近.即使我们以无以伦比的细致和 ...

最新文章

  1. 虚拟机VMware14安装kali-linux-2019.1-amd64
  2. LINUX自旋锁详解
  3. linux病毒sfewfesfs
  4. C#Redis集合set
  5. vue 使用sass 和less
  6. python对话机器人框架_长篇文讲解:使用Python AIML搭建聊天机器人的方法示例(收藏)...
  7. PowerDesiGner数据库设计
  8. android短信模板,短信服务 · Android – Bmob后端云
  9. leetcode971. Flip Binary Tree To Match Preorder Traversal
  10. 阿里的下一个15年:大数据是核心
  11. bzoj 4883 [Lydsy1705月赛]棋盘上的守卫——并查集(思路!)
  12. matlab在xrd中的应用,XRD物相分析(Jade软件的应用).pdf
  13. android 问题-----Please execute 'adb uninstall com.newland.securityclient' in a shell.
  14. document.writeln
  15. 【雅思大作文考官范文】——第十一篇:'homework' essay
  16. 湖南科技学院计算机代码,湖南科技学院计算机与信息科学系.doc
  17. intellij idea 2016破解方法
  18. 手把手教你玩转 Excel 数据透视表
  19. 某奏云资源网址打不开的N种处理方法(亲测好用)
  20. Deep Learning读书笔记4---深度模型中的优化

热门文章

  1. 社区电脑计算机培训即将结束,电脑培训感言(2页)-原创力文档
  2. GGNMOS ESD保护器件
  3. 使用线程池优化多线程编程
  4. Oracle怎么统计clob的行数,Oracle CLOB性能
  5. linux期中架构文档,Linux期中架构 - osc_jbr77wuo的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. Mac系统如何进入mysql
  7. 163888一个普通程序员写给COO李大学的一封Mail(不是转载)
  8. 三、Git本地仓库基本操作——git仓库忽略跟踪文件
  9. 计算机组装试卷分析,高中英语试卷分析
  10. 磁盘及文件系统管理详解