leetcode

541.反转字符串II

力扣链接

用内置 reverse
class Solution {
public:
    std::string reverseStr(std::string s, int k) {
        // s = "abcdefg", k = 2  循环一"abcd" 循环二"efg"
        for (int i=0; i<s.size(); i+=2*k){
            // 剩余字符s.size()-i 小于k
            if (s.size()-i<k) reverse(s.begin()+i, s.end());
            else reverse(s.begin()+i, s.begin()+i+k);
        }
        return s;
    }
};
编写 reverse
class Solution {
public:
    // std::string s 值传递pass by value 函数内部使用副本操作,对s的修改不影响原始字符串s
    void reverse(std::string&s, int start, int end){
        for (;start<end;start++, end--)
            std::swap(s[start], s[end]);
    }

    std::string reverseStr(std::string s, int k) {
        for (int i=0; i<s.size(); i+=2*k){
            if (s.size()-i < k) reverse(s, i, s.size()-1);
            else reverse(s, i, i+k-1);
        }
        return s;
    }
};