力扣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. php 爬虫 类,php爬虫原型
  2. Android Http POST文件上传之-----RFC1867协议
  3. 想学习UI设计,培训的话需要多少钱?
  4. Ubuntu使用零碎记录
  5. c语言标识符附录,附录AC语言运算符表.PDF
  6. python快速搭建网页_使用python快速搭建HTTP服务实现局域网网页浏览或文件传输...
  7. c语言float和char几个字节,C语言当中int,float,double,char这四个有什么区别?
  8. GitHub 桌面版 v3.0 新特性「GitHub 热点速览 v.22.18」
  9. 内网/外网介绍以及两者比较
  10. 用python制作动态二维码_用Python制作动态二维码
  11. matlab liccode,有没有哪位大佬能帮忙解决以下两个错误:liccode=cha
  12. 如何从头开始创建可用于生产环境的Webpack 4配置
  13. PaddleX语义分割
  14. python求一元二次方程的解
  15. lw计算机组成,计算机组成习题答案(清华大学出版社)
  16. 人人皆可操作的108个抖音项目:汽车领域细分及玩法变现 (7)
  17. NGINX配置多域名
  18. 汇编语言---指令格式和基本语法
  19. android原生界面太烦了,Android进阶(二十七)Android原生扰人烦的布局
  20. 简单说 CSS中的mask—好好利用mask-image

热门文章

  1. 实现 组件-实体-系统
  2. python中的“ ... ”
  3. div在不固定高度的情况下垂直或者水平居中
  4. Python语言系统学习21:作品——简易计算器
  5. Python调用Linux终端命令---转自本人的私人博客
  6. 张艾迪(创始人):视觉计算极简主义的设计
  7. 常用网址收藏 (zz)
  8. c++中sqrt函数的使用
  9. torch.nn.Embedding的使用
  10. 夜雨寄北 文/江湖一劍客