https://leetcode-cn.com/problems/reverse-string-ii/
给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。
示例:
输入: s = “abcdefg”, k = 2
输出: “bacdfeg”
要求:
该字符串只包含小写的英文字母。
给定字符串的长度和 k 在[1, 10000]范围内。
/*思路
将字符串分为slen / 2k 组,剩余的单独处理即可
*/
void reverse(char *s, int end, int k, int g){
int i = 0;
for(; i < end / 2; i++){
int c1 = g * 2 * k + i;
int c2 = g * 2 * k + end - i - 1;
char tmp = s[c1];
s[c1] = s[c2];
s[c2] = tmp;
}
}
char * reverseStr(char * s, int k){
if(1 == k) return s;
int lens = strlen(s);
int g = lens / (2 * k);
int left = lens % (2 * k);
// 先处理剩余的
int i = 0;
if(left > 0 && left <= k){
reverse(s, left, k, g);
}else if (left > k){
reverse(s, k, k, g);
}
// 处理前面规则的
for(i = 0; i < g; i++){
reverse(s, k, k, i);
}
return s;
}