双指针法判断子序列(LeetCode 392)
判断子序列
子序列是在字符串或者数组中,删除一些元素(也可以不删除)而不改变剩余元素的顺序的相对位置而形成的新数组或字符串
(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
题目描述(力扣392题)
判断子序列
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。
示例1:
输入:s = "abc", t = "ahbgdc"
输出:true
示例2:
输入:s = "axc", t = "ahbgdc"
输出:false
提示:
0 <= s.length <= 100
0 <= t.length <= 10^4
两个字符串都只由小写字符组成。
方法 —— 双指针
定义两个指针i和j分别指向s和t字符串的首字符

开始循环遍历要判断的子序列s字符串
- 当
s[i] == t[j]时,代表匹配成功,此时同时对i和j加一 - 当
s[i] != t[j]时,匹配失败,此时仅对j指向源字符串的指针加一
当i超出字符串s范围时,说明s是t的子序列
如果在遍历过程中,j超出字符串t的范围,则说明s不是t的子序列
代码:
class Solution {
public:
bool isSubsequence(string s, string t) {
// 双指针
int i = 0, j = 0;
while(i < s.size()){
if(j >= t.size()) return false;
if(s[i] == t[j])
i++, j++;
else
j++;
}
return true;
}
};

浙公网安备 33010602011771号