题目:
示例:
分析:
给两个字符串s和t,问s是不是t的子序列.即判断t中能不能提取出s(s有的元素,t都要有.并且字符的相对顺序不能变,如果字符的相对顺序能变的话就不能用双指针来做,而是要用哈希表了,可以参考力扣383赎金信这题).
这题虽然简单,但是是练习双指针的一个很好的题目.
我们定义两个指针si,ti分别指向s和t,如果两个指针指向的字符相同,则代表t中含有s的其中一个元素,然后两个指针都往右移动.如果不相同,则只移动指向t的指针,直到寻找到和指向s的指针指向的元素相同.
到最后,如果指向s的指针指向了s的末尾,则表示t含有s的全部元素,即s是t的子序列,反之则不是.
代码+运行结果:
class Solution {
public:
bool isSubsequence(string s, string t) {
int si=0,ti=0;
while(si<s.size()&&ti<t.size()){
if(s[si]==t[ti]){
++si;++ti;
}else{
++ti;
}
}
return si==s.size();
}
};