一个人离问题愈远就愈理想主义。

题目描述:

判断子序列

给定字符串 st ,判断 s 是否为 t 的子序列。

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace""abcde"的一个子序列,而"aec"不是)。

解题代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public:
bool isSubsequence(string s, string t) {
int i = 0, j = 0;
if (s.size() == 0) return true;
if(s.size() > t.size()){
return false;
}
while (i < s.size() && j < t.size()) {
if(s[i] == t[j]){
i++;
j++;
}
else{
j++;
}
}
if(i == s.size()){
return true;
}else{
return false;
}
}
};

image-20231027161957143

解读与收获:

双指针,如果匹配到s[i] == t[j]则i和j同时移动,如果不匹配则只移动j,最终根据终止条件判断结果。