[Leetcode][第392题][JAVA][判断子序列][动态规划][双指针]
【问题描述】[简单]
【解答思路】
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][判断子序列][动态规划][双指针]相关推荐
- python 判断子序列_Leetcode练习(Python):第392题:判断子序列:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。...
题目: 判断子序列:给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 你可以认为 s 和 t 中仅包含英文小写字母.字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串 ...
- [Leetcode][第491题][JAVA][递增子序列][回溯][RK算法]
[问题描述][中等] [解答思路] 1. 二进制枚举 + 哈希 复杂度 class Solution {List<Integer> temp = new ArrayList<Inte ...
- [Leetcode][第486题][JAVA][预测赢家][动态规划][递归]
[问题描述][中等] [解答思路] 1.递归 复杂度 class Solution {public boolean PredictTheWinner(int[] nums) {return total ...
- [Leetcode][第312题][JAVA][戳气球][动态规划][记忆化搜索]
[问题描述][困难] [解答思路] 1. 记忆化搜索 时间复杂度:O(n^3) 空间复杂度:O(n^2) class Solution {public int[][] rec;public int[] ...
- [剑指offer]面试题第[49]题[Leetcode][第264题][JAVA][丑数][动态规划][堆]
[问题描述][中等] [解答思路] 1. 动态规划 时间复杂度:O(N) 空间复杂度:O(N) class Solution {public int nthUglyNumber(int n) {int ...
- [Leetcode][第785题][JAVA][判断二分图][BFS][DFS]
[问题描述][中等] [解答思路] 1. DFS 深度优先遍历 时间复杂度:O(N+M) 空间复杂度:O(N) class Solution {private static final int UNC ...
- [Leetcode][第17题][JAVA][电话号码的字母组合][回溯]
[问题描述][中等] [解答思路] 用哈希表/数组存储每个数字对应的所有可能的字母,然后进行回溯操作. 回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是 ...
- [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]
[问题描述][中等] [解答思路] 1. 回溯 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.De ...
- [Leetcode][第201题][JAVA][数字范围按位与][位运算][Brian Kernighan]
[问题描述][中等] [解答思路] 1. 暴力 逐位与 ,只需要判断i= 0 或 i == 2147483647 的话,就跳出 for 循环即可. 时间复杂度:O(N) 空间复杂度:O(1) publ ...
最新文章
- 2021年大数据HBase(十四):HBase的原理及其相关的工作机制
- 高可用集群技术之heartbeat应用详解(一)
- extern 关键字用法
- 推荐系统里,可以用蒸馏吗?
- 数据库面试题【十三、超大分页怎么处理】
- FPGrowth算法总结复习
- JavaWeb学习总结(一):JavaWeb开发入门
- python基础(十三)
- 2018 终了,是时候秀出我的 Git 进化日志了!
- 暑期集训20190727 水(water)
- STL之set的应用
- c#的const可以用于引用类型吗
- 简易的站内搜索引擎 (万字长文!!绝对值得一看!!)
- Java io流详解四
- js如何让段落首行缩进2个字符
- WiFi万能钥匙,真的过气了?
- Buffon投针实验:究竟为什么是pi?
- windows 建立窗口的程序代码
- TiKV 集群版本的安全迁移
- iPhone 3G(是iPhone系列中的第二代)
热门文章
- Dubbo xml配置 和注解配置 写法
- SChema中group指示器的使用
- MVC中使用ajax传递json数组
- 使用Cucumber+Rspec玩转BDD(2)——邮件激活
- js正则匹配闭合标签_正则匹配闭合HTML标签(支持嵌套)
- birt报表表格边框_Python 快速设置 Excel 表格边框
- matlab零相移滤波,零相移数字滤波器边界效应讨论(附程序与参考文献)
- java 图形绘制_Java Graphics 图形绘制
- android 三星 白色,时尚实用都拥有 白色Android手机盘点
- mysql5.7.11 创建用户_修改更新查找MySQL5.7.x的root用户的默认密码