leetcode:392. 判断子序列
题目
给定字符串 s
和 t
,判断 s
是否为 t
的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"
是"abcde"
的一个子序列,而"aec"
不是)。
进阶:
- 如果有大量输入的
S
,称作S1, S2, ... , Sk
其中 k >= 10亿,你需要依次检查它们是否为T
的子序列。在这种情况下,你会怎样改变代码?
示例:
输入:s = "abc", t = "ahbgdc"
输出:true
输入:s = "axc", t = "ahbgdc"
输出:false
解答 & 代码
解法一:双指针
class Solution {
public:
bool isSubsequence(string s, string t) {
int sIdx = 0;
int tIdx = 0;
while(sIdx < s.size() && tIdx < t.size())
{
// 如果两个字符相等,则两个指针都右移
if(s[sIdx] == t[tIdx])
{
++sIdx;
++tIdx;
}
// 否则,字符串 t 的指针右移
else
++tIdx;
}
// 如果 s 序列遍历完,说明 s 是 t 的子序列;否则不是
return sIdx == s.size();
}
};
复杂度分析:设字符串 s
长为 m,字符串t
长为 n
- 时间复杂度 O(m + n):
- 空间复杂度 O(1):
执行结果:
执行结果:通过
执行用时:0 ms, 在所有 C++ 提交中击败了 100.00% 的用户
内存消耗:6.1 MB, 在所有 C++ 提交中击败了 90.10% 的用户