原题目:https://leetcode.com/problems/is-subsequence
本题其实非常简单:先取s的第一个元素,对t进行遍历,如果有匹配该元素的就代入第二个元素,然后在此基础初上继续遍历。当遍历过程完成后,判断是否所有的元素都被遍历即可。
但是做这道题时,我一开始没看清题意,以为是“只要t里含有s的元素”就行,没有考虑到顺序。因此我一开始采用的做法是先排序后二分查找,此举不仅浪费了时间,还增加了复杂度,且结果与题意不符。我在此与大家分享我的“教训”,希望我们以后都能尽量注意吧。
class Solution {
public:
/*void quickSort(string s, int l, int r)
{
if (l < r) {
int i = l, j = r, x = s[l];
while (i < j) {
while (i < j && s[j] >= x) {
j--;
}
if (i < j) {
s[i++] = s[j];
}
while (i < j && s[i] < x) {
i++;
}
if (i < j) {
s[j--] = s[i];
}
}
s[i] = x;
quickSort(s, l, i - 1);
quickSort(s, i + 1, r);
}
}
bool binary(char s, string t, int l, int r)
{
if (l > r) {
return false;
}
int mid = (l + r) / 2;
if (s == t[mid]) {
return true;
}
else if (s > t[mid]) {
return binary(s, t, mid + 1, r);
}
else {
return binary(s, t, l, mid - 1);
}
}*/
bool isSubsequence(string s, string t) {
/*quickSort(t, 0, t.size() - 1);
sort(t.begin(), t.end());
for (int i = 0; i < s.size(); i++) {
if (!binary(s[i], t, 0, t.size() - 1)) {
return false;
}
}
return true;*/
int i = 0;
if (s.size() != 0) {
for (int j = 0; j < t.size(); j++) {
if (s[i] == t[j]) {
i++;
if (i == s.size()) {
return true;
}
}
}
}
else {
return true;
}
return false;
}
};
如以上代码所示,只有最下面部分是有效的。。。随意吐槽即可
然后再给有效部分的代码截一张图: