反转字符串 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;}
};