【问题描述】[简单]

【解答思路】

1. 双指针

时间复杂度:O(N+M) 空间复杂度:O(1)

class Solution {public:bool isSubsequence(string s, string t) {int n = s.length(), m = t.length();int i = 0, j = 0;while (i < n && j < m) {if (s[i] == t[j]) {i++;}j++;}return i == n;}
};
2. 动态规划(后续挑战 )

第 1 步:设计状态
f[i][j] 表示字符串 tt 中从位置 ii 开始往后字符 jj 第一次出现的位置
第 2 步:状态转移方程

第 3 步:考虑初始化
//终止判断标志
for (int i = 0; i < 26; i++) {
f[m][i] = m;
}
第 4 步:考虑输出

时间复杂度:O(N) 空间复杂度:O(1)

class Solution {public boolean isSubsequence(String s, String t) {int n = s.length(), m = t.length();int[][] f = new int[m + 1][26];for (int i = 0; i < 26; i++) {f[m][i] = m;}for (int i = m - 1; i >= 0; i--) {for (int j = 0; j < 26; j++) {if (t.charAt(i) == j + 'a')f[i][j] = i;elsef[i][j] = f[i + 1][j];}}int add = 0;for (int i = 0; i < n; i++) {if (f[add][s.charAt(i) - 'a'] == m) {return false;}add = f[add][s.charAt(i) - 'a'] + 1;}return true;}
}

【总结】

1. 动态规划流程

第 1 步:设计状态
第 2 步:状态转移方程
第 3 步:考虑初始化
第 4 步:考虑输出
第 5 步:考虑是否可以状态压缩

2.动态规划方案避免了每次匹配都需要扫描一遍 T ,每处理一次子串只需要扫描一遍Si即可

转载链接:https://leetcode-cn.com/problems/is-subsequence/solution/pan-duan-zi-xu-lie-by-leetcode-solution/

[Leetcode][第392题][JAVA][判断子序列][动态规划][双指针]相关推荐

  1. python 判断子序列_Leetcode练习(Python):第392题:判断子序列:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。...

    题目: 判断子序列:给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 你可以认为 s 和 t 中仅包含英文小写字母.字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串 ...

  2. [Leetcode][第491题][JAVA][递增子序列][回溯][RK算法]

    [问题描述][中等] [解答思路] 1. 二进制枚举 + 哈希 复杂度 class Solution {List<Integer> temp = new ArrayList<Inte ...

  3. [Leetcode][第486题][JAVA][预测赢家][动态规划][递归]

    [问题描述][中等] [解答思路] 1.递归 复杂度 class Solution {public boolean PredictTheWinner(int[] nums) {return total ...

  4. [Leetcode][第312题][JAVA][戳气球][动态规划][记忆化搜索]

    [问题描述][困难] [解答思路] 1. 记忆化搜索 时间复杂度:O(n^3) 空间复杂度:O(n^2) class Solution {public int[][] rec;public int[] ...

  5. [剑指offer]面试题第[49]题[Leetcode][第264题][JAVA][丑数][动态规划][堆]

    [问题描述][中等] [解答思路] 1. 动态规划 时间复杂度:O(N) 空间复杂度:O(N) class Solution {public int nthUglyNumber(int n) {int ...

  6. [Leetcode][第785题][JAVA][判断二分图][BFS][DFS]

    [问题描述][中等] [解答思路] 1. DFS 深度优先遍历 时间复杂度:O(N+M) 空间复杂度:O(N) class Solution {private static final int UNC ...

  7. [Leetcode][第17题][JAVA][电话号码的字母组合][回溯]

    [问题描述][中等] [解答思路] 用哈希表/数组存储每个数字对应的所有可能的字母,然后进行回溯操作. 回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是 ...

  8. [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]

    [问题描述][中等] [解答思路] 1. 回溯 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.De ...

  9. [Leetcode][第201题][JAVA][数字范围按位与][位运算][Brian Kernighan]

    [问题描述][中等] [解答思路] 1. 暴力 逐位与 ,只需要判断i= 0 或 i == 2147483647 的话,就跳出 for 循环即可. 时间复杂度:O(N) 空间复杂度:O(1) publ ...

最新文章

  1. 2021年大数据HBase(十四):HBase的原理及其相关的工作机制
  2. 高可用集群技术之heartbeat应用详解(一)
  3. extern 关键字用法
  4. 推荐系统里,可以用蒸馏吗?
  5. 数据库面试题【十三、超大分页怎么处理】
  6. FPGrowth算法总结复习
  7. JavaWeb学习总结(一):JavaWeb开发入门
  8. python基础(十三)
  9. 2018 终了,是时候秀出我的 Git 进化日志了!
  10. 暑期集训20190727 水(water)
  11. STL之set的应用
  12. c#的const可以用于引用类型吗
  13. 简易的站内搜索引擎 (万字长文!!绝对值得一看!!)
  14. Java io流详解四
  15. js如何让段落首行缩进2个字符
  16. WiFi万能钥匙,真的过气了?
  17. Buffon投针实验:究竟为什么是pi?
  18. windows 建立窗口的程序代码
  19. TiKV 集群版本的安全迁移
  20. iPhone 3G(是iPhone系列中的第二代)

热门文章

  1. Dubbo xml配置 和注解配置 写法
  2. SChema中group指示器的使用
  3. MVC中使用ajax传递json数组
  4. 使用Cucumber+Rspec玩转BDD(2)——邮件激活
  5. js正则匹配闭合标签_正则匹配闭合HTML标签(支持嵌套)
  6. birt报表表格边框_Python 快速设置 Excel 表格边框
  7. matlab零相移滤波,零相移数字滤波器边界效应讨论(附程序与参考文献)
  8. java 图形绘制_Java Graphics 图形绘制
  9. android 三星 白色,时尚实用都拥有 白色Android手机盘点
  10. mysql5.7.11 创建用户_修改更新查找MySQL5.7.x的root用户的默认密码