反转字符串 II--力扣541
反转字符串 II
- 题目
- 思路
- 代码
题目
思路
本题的关键在于理解每隔 2k 个字符的前 k 个字符进行反转,剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符。并且剩余字符少于 k 个,则将剩余字符全部反转。
让i每次跳2k,成为每一次循环的起点,再进行判断,如果i + k <= s.size(),说明剩余字符小于 2k 但大于或等于 k 个,所以反转前 k 个字符。否则说明剩余字符少于 k 个,则将剩余字符全部反转。
代码
class Solution {
public:
void reverse(string& s, int x, int y) {
for (int i = x, j = y; i < j; i++, j--) {
swap(s[i], s[j]);
}
}
string reverseStr(string s, int k) {
for (int i = 0; i < s.size(); i += (2 * k)) {
//如果剩余字符串数<=2k且>=k,那么翻转前k个
if (i + k <= s.size()) {
reverse(s, i, i + k -1);
continue;
} else {
//如果剩余字符串数<k,翻转剩余的全部字符
reverse(s, i, s.size() - 1);
}
}
return s;
}
};