给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例 1:
输入:s ="abcdefg", k =2
输出:"bacdfeg"
示例 2:
输入:s ="abcd", k =2
输出:"bacd"
条件判断和反转操作: (1)足够的字符用于完整的 k 反转:如果当前位置 i 加上 k 仍然在字符串的范围内 (i + k < s.size()),则使用 std::reverse 反转从位置 i 开始的 k 个字符。 (2)字符不足 k 个:如果上述条件不成立,说明从位置 i 到字符串末尾的字符不足 k 个,此时反转这部分剩余的所有字符。
完整代码
#include<iostream>#include<string>#include<algorithm>usingnamespace std;classSolution{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);continue;}elsereverse(s.begin()+ i, s.begin()+ s.size());}return s;}};intmain(){
string s ="abcdefg";int k =2;
cout <<Solution().reverseStr(s, k)<< endl;return0;}