一、题目描述
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
示例 1:
输入:s = "abc", t = "ahbgdc"
输出:true
示例 2:
输入:s = "axc", t = "ahbgdc"
输出:false
二、运行结果
三、算法思路
对于字符串 s 中的每个字符(按从左到右的顺序),在字符串 t 中从左到右查找与其相同的字符,如果找到,就对 s 串中的下一个字符,从 t 串上一次匹配的字符位置开始往后查找(t 和 s 中每一个字符都是只遍历一次,不重复遍历),若对于 s 中的某个字符,在 t 中未遍历的子串部分无法找到相同的字符,就放回false,若顺利遍历完字符串s,则表示对于串 s 中的每一个字符,在串 t 中都能找到相同的,即s 是t 的一个子序列,返回true。
四、代码
class Solution {
public:
bool isSubsequence(string s, string t) {
int slen = s.size();
int tlen = t.size();
int curIndex = 0; //指向t中匹配字符的位置
for(int i = 0; i< slen; ++i)
{
while(curIndex < tlen && t[curIndex] != s[i])
{
curIndex++;
}
if(curIndex >= tlen)
return false;
curIndex++; //s的下一个字符要从t中的下一个字符开始匹配
}
return true;
}
};