Skip to content

Commit 22d32b5

Browse files
Update
1 parent 54b38fd commit 22d32b5

File tree

2 files changed

+33
-7
lines changed

2 files changed

+33
-7
lines changed

‎pics/541_反转字符串II.png‎

32.4 KB
Loading

‎problems/0541.反转字符串II.md‎

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,37 @@
44
https://leetcode-cn.com/problems/reverse-string-ii/
55

66
## 思路
7+
先做0344.反转字符串,在做这道题目更好一些
78

9+
for循环中i 每次移动 2 * k,然后判断是否需要有反转的区间
10+
11+
性能如下:
12+
<imgsrc='../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
```
1139
class Solution{
1240
public:
@@ -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

Comments
(0)