给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
class Solution {
public:
bool isSubsequence(string s, string t) {
if(s==t) return true;
if(s.size()>t.size()) return false;
for( int i = 0,j = 0;i<s.size();)
{
if(s[i]==t[j])
{
i++;
j++;
}
else
{
while(s[i]!=t[j]&&j<t.size())
{
j++;
}
if( j < t.size()-1||(i==s.size()-1 && j==t.size()-1))
{
i++;
j++;
}
else
return false;
}
}
return true;
}
};
思路(其实感觉有点混乱的):
两个指针分别指向s和t的初始,逐个进行比对,当发现比对不上且j未越界时对t的指针j进行++,找到下一个能够和s[i]匹配上的t[j],此时如果j++未越界或者i,j都到了最后一位的话进行++操作。否则直接return false。当匹配结束且没有中断返回false说明匹配成功,return true;