LeetCode 392. 判断子序列
题目描述
思路分析
解法一:双指针(推荐)
核心思路:
- 用指针
i指向s,指针j指向t。- 若字符相等则
i++,否则只移动j。- 当
i走到末尾即为子序列。
复杂度分析:
- 时间复杂度:O(m + n),其中 m、n 分别为
s和t的长度。- 空间复杂度:O(1),仅使用常数额外空间。
class Solution {
public boolean isSubsequence(String s, String t) {
int i = 0;
int j = 0;
// 双指针扫描
while (i < s.length() && j < t.length()) {
if (s.charAt(i) == t.charAt(j)) {
i++;
}
j++;
}
return i == s.length();
}
}
func isSubsequence(s string, t string) bool {
i := 0
j := 0
// 双指针扫描
for i < len(s) && j < len(t) {
if s[i] == t[j] {
i++
}
j++
}
return i == len(s)
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 524. 通过删除字母匹配到字典里最长单词 | 中等 | 双指针 |
| 583. 两个字符串的删除操作 | 中等 | 动态规划 |
| 1143. 最长公共子序列 | 中等 | 动态规划 |
| 115. 不同的子序列 | 困难 | 动态规划 |
| 392. 判断子序列 | 简单 | 双指针 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!