题目来源于知识星球—英雄算法联盟,七月算法集训专题
目录
前言
跟随英雄算法联盟博主—英雄哪里出来,每天完成相应的算法练习,一个月后,必定会有所成长!
一、392.判断子序列(简单)
1.题目描述
2.解题思路
判断s是否为t的子序列,用双指针,i来遍历s,j遍历t,当两个字符串非空且在
初始位置相等时,i向后移,j也向后移,否则j向后移。
3.代码演示(C++)
class Solution
{
public:
bool isSubsequence(string s, string t)
{
int i=0;
int j=0;
while(s[i]&&t[j])
{
if(s[i]==t[j])
{
i++;
}
j++;
}
return s[i]=='\0';
}
};
4.题目链接
二、541.反转字符串II (简单)
1.题目描述
2.解题思路
反转每个下标从 2k2k 的倍数开始的,长度为 kk 的子串。若该子串长度
不足 k,则反转整个子串。
3.代码演示(C++)
class Solution
{
public:
string reverseStr(string s, int k)
{
int n = s.length();
for (int i = 0; i < n; i += 2 * k)
{
reverse(s.begin() + i, s.begin() + min(i + k, n));
}
return s;
}
};
4.题目链接
三、面试题16.24.数对和(中等)
1.题目描述
2.解题思路
排序之后,用双指针向中间移动并判断即可。
3.代码演示(C++)
class Solution
{
public:
vector<vector<int>> pairSums(vector<int>& nums, int target)
{
int l, r;
vector<vector<int>>ret;
sort(nums.begin(), nums.end());
l = 0;
r = nums.size() - 1;
while(l < r)
{
int val = nums[l] + nums[r];
if(val > target)
{
r --;
}
else if(val < target)
{
l ++;
}
else
{
ret.push_back({nums[l], nums[r]});
++l;
--r;
}
}
return ret;
}
};
4.题目链接
四、696.计数二进制子串(简单)
1.题目描述
2.解题思路
这居然是简单题,我不敢相信!
3.代码演示(C++)
4.题目链接
总结
每天跟随英雄哥学习相关的算法,一个月会收获很多,如果你想了解更多关于知识星球的内容,欢迎联系我!