This commit is contained in:
youngyangyang04
2020-07-10 09:13:31 +08:00
parent 1c6a050210
commit c6be40e8e1
2 changed files with 33 additions and 7 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@ -4,9 +4,37 @@
https://leetcode-cn.com/problems/reverse-string-ii/
## 思路
先做0344.反转字符串,在做这道题目更好一些
for循环中i 每次移动 2 * k然后判断是否需要有反转的区间
性能如下:
<img src='../pics/541_反转字符串II.png' width=600> </img></div>
## C++代码
使用C++库里的反转函数reverse
```
class Solution {
public:
string reverseStr(string s, int k) {
for (int i = 0; i < s.size(); i += (2 * k)) {
// 1. 每隔 2k 个字符的前 k 个字符进行反转
// 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
if (i + k <= s.size()) {
reverse(s.begin() + i, s.begin() + i + k );
continue;
}
// 3. 剩余字符少于 k 个,则将剩余字符全部反转。
reverse(s.begin() + i, s.begin() + s.size());
}
return s;
}
};
```
自己实现反转函数
```
class Solution {
public:
@ -16,22 +44,20 @@ public:
swap(s[i], s[j]);
}
}
// C++ 自带了reverse 方法,但是我依然建议自己实现
string reverseStr(string s, int k) {
bool entry = false;
int i;
for (i = 0; i < s.size(); i += (2 * k)) {
for (int i = 0; i < s.size(); i += (2 * k)) {
// 1. 每隔 2k 个字符的前 k 个字符进行反转
// 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
if (i + k <= s.size()) {
// std::reverse(s.begin() + i, s.begin() + i + k );
reverse(s, i, i + k - 1);
continue;
}
// std::reverse(s.begin() + i, s.begin() + s.size());
// 3. 剩余字符少于 k 个,则将剩余字符全部反转。
reverse(s, i, s.size() - 1);
}
return s;
}
};
```
> 笔者在先后在腾讯和百度从事技术研发多年利用工作之余重刷leetcode本文 [GitHub](https://github.com/youngyangyang04/leetcode-master )https://github.com/youngyangyang04/leetcode-master 已经收录欢迎starfork共同学习一起进步。