541. 反转字符串 II
自己写的:
class Solution {
public:
string reverseStr(string s, int k) {
int n = s.size();
int cnt = 1;
while (cnt * 2 * k <= n)
{
int t = (cnt - 1) * 2 * k;
reverse(s.begin() + t, s.begin() + t + k);
++cnt;
}
int m = (cnt - 1) * 2 * k;
if (n - m < k)
reverse(s.begin() + m, s.begin() + n);
else
reverse(s.begin() + m, s.begin() + m + k);
return s;
}
};
看了卡哥思路,思路更简洁,代码更简洁。
卡哥代码:
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;
}
};
另一种思路代码:
class Solution {
public:
string reverseStr(string s, int k) {
int n = s.size(),pos = 0;
while(pos < n){
//剩余字符串大于等于k的情况
if(pos + k < n) reverse(s.begin() + pos, s.begin() + pos + k);
//剩余字符串不足k的情况
else reverse(s.begin() + pos,s.end());
pos += 2 * k;
}
return s;
}
};
这种思路似乎和我写的代码思路差不多,但是我的代码写复杂了,没必要定义一个cnt,直接用pos就可以。

浙公网安备 33010602011771号