Reverse String II

Reverse String II

题目描述:

给定一个字符串和数字k,要求逆序字符串中每2k字符的前k个,如果末尾剩下的字符超过k个,只逆序前k个;如果小于k个,则将其全部逆序。

例子:

具体描述见LeetCode541

解题思路:

本题的主要需要注意的地方在于如何判断当前是否到2k字符的末尾和如何处理剩下的字符。这边主要使用了cur作为遍历的index;遍历之间判断加上2k是否会超过字符的范围;然后在到达末尾的时候,判断末尾字符串的长度;根据不同的情况对字符进行逆序操作。其中定义了一个逆序函数用于每一步的逆序。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
string reverseStr(string s, int k) {
int cur = 0;
while(cur + 2 * k <= s.size()){
reverse(s, cur, cur + k - 1);
cur += 2 * k;
}
int left = s.size() - cur;
//判断剩余字符的长度
if (left < k) reverse(s, cur, s.size() - 1);
//小于k个的情况
if (left >= k) reverse(s, cur, cur + k - 1);
//如果大于k个小于2k个
return s;
}
void reverse(string& s, int start, int end){
while(start < end){
swap(s[start], s[end]);//交换函数
start++;
end--;
}
}
};