前言
题目: 541. 反转字符串 II
文档: 代码随想录——反转字符串 II
编程语言: C++
解题状态: 解答错误,有一部分会缺少反转的次数
思路
当需要固定规律一段一段去处理字符串的时候,要想想在在for循环的表达式上做做文章。本题考虑 2 k 2k 2k这个区间的边界就可以,不需要再根据剩余字符的个数再仔细讨论。
代码
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 );
} else {
// 3. 剩余字符少于 k 个,则将剩余字符全部反转。
reverse(s.begin() + i, s.end());
}
}
return s;
}
};
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)