持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情
1、写在前面
大家好,我是翼同学,这里是【水滴计划 | 刷题日志】
每日两题,拒绝摆烂。
2、内容
2.1、题目一:反转字符串
(1) 描述
(2) 举例
(3) 解题
利用双指针解法即可。
参考代码如下:
class Solution {
public:
void reverseString(vector<char>& s) {
for(int i = 0, j = s.size()-1; i<s.size()/2; i++,j-- ) {
swap(s[i], s[j]);
}
}
};
2.2、题目二:反转字符串 II
链接:541. 反转字符串 II - 力扣(LeetCode)
(1) 描述
(2) 举例
(3) 解题
参考代码一:
class Solution {
public:
string reverseStr(string s, int k) {
// for循环遍历字符串,循环变量更新语句为 i += (2*k)
for (int i = 0; i < s.size(); i += (2*k)) {
// 如果剩余字符的个数范围为:[k, 2k),则反转前 k 个字符
if (i + k <= s.size()) {
reverse(s.begin() + i, s.begin() + i + k );
}
// 如果剩余字符的个数范围为:[0, k),则将剩余字符全部反转
else {
reverse(s.begin() + i, s.end());
}
}
// 最后返回字符串 s
return s;
}
};
参考代码二:
class Solution {
public:
// 编写一个功能函数,返回较小值
int min (int i, int j ) {
return (i<=j) ? i : j;
}
string reverseStr(string s, int k) {
// for循环遍历字符串s
for (int i = 0; i < s.length(); i += (2*k)) {
// 进行反转
reverse(s.begin()+i, s.begin() + min(i + k, s.length()) );
}
// 最后返回结果
return s;
}
};
3、写在最后
好了,今天就刷到这里,明天再来。