反转字符串2
reverse函数的用法(reverse一般是左闭右开区间):
1.反转数组:
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
// 反转数组arr的全部元素
reverse(arr, arr + n);
2.反转字符串:
string str = "hello";
// 反转整个字符串
reverse(str.begin(), str.end());
3.反转容器部分元素:
vector<int> vec = {1, 2, 3, 4, 5};
// 反转vec中索引1到3(不包含4)位置的元素
reverse(vec.begin() + 1, vec.begin() + 4);
class Solution {
public:string reverseStr(string s, int k) {for(int i=0;i<s.size();i+=2*k){if(i+k<s.size()){reverse(s.begin()+i,s.begin()+i+k);}else{reverse(s.begin()+i,s.end());}}return s;}
};
创建一个变量i,将i赋值为0。当i属于0到数组长度范围内时,进入循环。i每次的步长为i+2*k。如果i+k小于数组总长度。则使用reverse函数交换i到i+k的值。否则,交换多余出来的元素的位置。跳出循环,返回s。
class Solution {
public:void reverses(string&s,int start,int end){for(int i=start,j=end;i<j;i++,j--){swap(s[i],s[j]);}}string reverseStr(string s, int k) {for(int i=0;i<s.size();i+=2*k){if(i+k<=s.size()){reverse(s.begin()+i,s.begin()+i+k);continue;}else{reverse(s.begin()+i,s.end());}}return s;}
};
创建一个void类型子函数,命名为reverse将start和end传入reverse中。 创建两个新的变量i和j。将start赋值给i,将end赋值给j。当i<j时进入循环,调换s[i]和s[j]的值。将i和j向里缩。跳出循环。创建一个string类型的主函数,命名为reverseStr,用来接受string类型的s,和int类型的k。定义一个变量初始化为0。当i小于数组总长度时,进入循环。i的步长为i+2*k。如果i+k小于数组总长度 。则使用reverse函数交换i到i+k的值。否则,交换多余出来的元素的位置。跳出循环,返回s。
class Solution {
public:string reverseStr(string s, int k) {int i=s.size(),pos=0;while(pos<i){if(pos+k<i){reverse(s.begin()+pos,s.begin()+pos+k);}else{reverse(s.begin()+pos,s.end());}pos+=2*k;}return s;}
};
创建一个变量i和pos,将i初始化为数组总长度,将pos初始化为0。当pos小于i时,进入循环。如果i+pos小于数组总长度。则使用reverse函数交换i到i+pos的值。否则,交换多余出来的元素的位置。i每次的步长为i+2*k。跳出循环,返回s。