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

猜你喜欢

转载自blog.csdn.net/GamBleout/article/details/142343436