题目描述
- 题号:392
- 难度:简单
- 题目描述:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
- 示例:
题解
本题只需要遍历字符串就好,需要两个指针,一个指向模式串一个指向目标串,以模式串为依据,判断目标串。
代码实现
class Solution {
public:
bool isSubsequence(string s, string t) {
char * sp = &s[0];
char * tp = &t[0];
while(*sp != '\0'){
if(*sp == *tp && *tp != '\0'){
sp++;
tp++;
}
else if(*sp != *tp && *tp != '\0'){
tp++;
}
else{
return false;
}
}
return true;
}
};
知识Note-小Tips
1.逐位访问字符串中的字符
C++中的String类型可以通过char型指针实现按位的访问。
如本题中的
string s;
char * sp = &s[0];
注意:
char * sp = &s;是错误的,因为s是string类型,&s应该赋值为string型指针,所以此处选择&s[0]。
还可以通过s[i]来访问字符串s的第i位字符。
2.字符串的结尾
字符串的结尾是 ‘\0’ ,可以用此检验是否到达末尾。
3.模式串与目标串
假设P是给定的子串,T是待查找的字符串,要求从T中找出与P相同的所有子串,这个问题成为模式匹配问题。P称为模式,T称为目标。
参考文献
无