代码链接:https://leetcode.cn/problems/is-subsequence/solution/by-jyd-zeph/
思路及算法:双指针
设置双指针 i , j i, j i,j 分别指向字符串 s , t s, t s,t 的首个字符,遍历字符串 t t t :
- 当
s
[
i
]
=
=
t
[
j
]
s[i] == t[j]
s[i]==t[j] 时,代表匹配成功,此时同时
i
+
+
,
j
+
+
i++, j++
i++,j++;
进而,若 i i i 已走过 s s s 尾部,代表 s s s 是 t t t 的子序列,此时应提前返回 true ; - 当 s [ i ] ! = t [ j ] s[i] != t[j] s[i]!=t[j] 时,代表匹配失败,此时仅 j + + j++ j++;
若遍历完字符串 t t t 后,字符串 s s s 仍未遍历完,代表 s s s 不是 t t t 的子序列,此时返回 false 。
class Solution:
def isSubsequence(self, s: str, t: str) -> bool:
n = len(s)
m = len(t)
i, j = 0, 0
while i < n and j < m:
if s[i] == t[j]:
i += 1
j += 1
# if i == n:
# return True
return (i == n)
复杂度分析:
- 时间复杂度 O ( N ) O(N) O(N): 其中 N N N 为字符串 t t t 的长度。最差情况下需完整遍历 t t t。
- 空间复杂度 O ( 1 ) O(1) O(1): i , j i, j i,j 变量使用常数大小空间。