目录
今日任务
● 344.反转字符串
● 541. 反转字符串II
● 卡码网:54.替换数字
一、反转字符串
题目链接/文章讲解/视频讲解:代码随想录
本题要求不重新开辟空间,并且用函数的形式实现字符串反转
我首先想到的就是双指针,只要交换前后两个指针的值,直到两个指针相遇就可以了。
class Solution {
public:
void reverseString(vector<char>& s) {
int len=s.size(),left,right;
for(left=0,right=len-1;left<right;left++,right--){
swap(s[left],s[right]);
}
return ;
}
};
交换函数:
①c++自带的swap
swap(s[i],s[j]);
②temp作为中间值
int temp=s[i];
s[i]=s[j];
s[j]=temp;
③亦或运算
s[i]^=s[j];
s[j]^=s[i];
s[i]^=s[j];
二、 反转字符串II
给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例:
输入: s = "abcdefg", k = 2 输出: "bacdfeg"
再看解题过程之前,自己的代码,当时想法就是这是一个类似于长度不变的滑动窗口,可以用双指针解决,代码难看了点,但是解出来还是比较开心
class Solution {
p