44https://leetcode-cn.com/problems/reverse-string-ii/
55
66## 思路
7+ 先做0344.反转字符串,在做这道题目更好一些
78
9+ for循环中i 每次移动 2 * k,然后判断是否需要有反转的区间
10+
11+ 性能如下:
12+ <img src =' ../pics/541_反转字符串II.png ' width =600 > </img ></div >
813
914## C++代码
15+
16+ 使用C++库里的反转函数reverse
17+
18+ ```
19+ class Solution{
20+ public:
21+ string reverseStr(string s, int k){
22+ for (int i = 0; i < s.size(); i += (2 * k)){
23+ // 1. 每隔 2k 个字符的前 k 个字符进行反转
24+ // 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
25+ if (i + k <= s.size()){
26+ reverse(s.begin() + i, s.begin() + i + k );
27+ continue;
28+ }
29+ // 3. 剩余字符少于 k 个,则将剩余字符全部反转。
30+ reverse(s.begin() + i, s.begin() + s.size());
31+ }
32+ return s;
33+ }
34+ };
35+ ```
36+
37+ 自己实现反转函数
1038```
1139class Solution{
1240public:
@@ -16,22 +44,20 @@ public:
1644 swap(s[i], s[j]);
1745 }
1846 }
19-
20- // C++ 自带了reverse 方法,但是我依然建议自己实现
2147 string reverseStr(string s, int k){
22- bool entry = false;
23- int i;
24- for (i = 0; i < s.size(); i += (2 * k)){
48+ for (int i = 0; i < s.size(); i += (2 * k)){
49+ // 1. 每隔 2k 个字符的前 k 个字符进行反转
50+ // 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
2551 if (i + k <= s.size()){
26- // std::reverse(s.begin() + i, s.begin() + i + k );
2752 reverse(s, i, i + k - 1);
2853 continue;
2954 }
30- // std::reverse(s.begin() + i, s.begin() + s.size());
55+ // 3. 剩余字符少于 k 个,则将剩余字符全部反转。
3156 reverse(s, i, s.size() - 1);
3257 }
3358 return s;
3459 }
3560};
3661```
62+
3763> 笔者在先后在腾讯和百度从事技术研发多年,利用工作之余重刷leetcode,本文 [ GitHub] ( https://github.com/youngyangyang04/leetcode-master ) :https://github.com/youngyangyang04/leetcode-master 已经收录,欢迎star,fork,共同学习,一起进步。
0 commit comments