541. 反转字符串 II

Introduction

Question: 541. 反转字符串 II

给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

 

示例:

输入: s = "abcdefg", k = 2
输出: "bacdfeg"

 

提示:

  1. 该字符串只包含小写英文字母。
  2. 给定字符串的长度和 k[1, 10000] 范围内。

解法一

Analysis

LC344-reverse-string 类似。

Implement

1
2
3
4
5
6
7
8
9
10
11
12
inline void reverse(string &s, int first, int last) {
for(; first < last; first++, last--) {
swap(s[first], s[last]);
}
}
string reverseStr(string s, int k) {
int n = s.size();
for(int i = 0;i < n; i += 2*k) {
reverse(s, i, min(i + k - 1, n - 1));
}
return s;
}