0%

392.判断子序列

双指针

判断子序列的关键在于,s 中的字符只需要按顺序出现在 t 中即可,不要求连续。

因此可以用两个指针,i 指向 sj 指向 t。固定 i,不断向右移动 j,直到在 t 中找到和 s[i] 相同的字符。如果一直找到 t 末尾都没找到,说明 s 不是 t 的子序列;否则继续匹配 s 的下一个字符。

如果最终 s 的所有字符都能依次找到,那么它就是 t 的子序列。

时间复杂度 $O(m + n)$

空间复杂度 $O(1)$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public boolean isSubsequence(String s, String t) {
int m = s.length();
int n = t.length();
int j = 0;
for (int i = 0; i < m; ++i) {
while (j < n && t.charAt(j) != s.charAt(i)) {
j++;
}
if (j == n) {
return false;
}
j++;
}
return true;
}
}