一、运行结果
二、题目
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例 1:
输入:s = "abcdefg", k = 2
输出:"bacdfeg"
示例 2:
输入:s = "abcd", k = 2
输出:"bacd"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-string-ii
三、思路
题目中已经给出了反转的说明,每2k长度的子串就反转前k长度的子串,最后不足2k长度的子串再按照以下规则进行反转:
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
四、代码
class Solution {
public:
string reverseStr(string s, int k) {
int len = s.size();
int index = 0, count = 0; //index为索引,count表示目前经过了多少个2k
while(index + 2*k < len){ //每2k长度就逆转前k个字符
reverse(s.begin() + 2*k*count, s.begin() + 2*k*count + k);
count++;
index += 2 * k;
}
if(index + k > len){ //处理最后长度不足2k的部分
reverse(s.begin() + 2*k*count, s.end());
}else{
reverse(s.begin() + 2*k*count, s.begin() + 2*k*count + k);
}
return s;
}
};