Leetcode541. 反转字符串

题目

给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。

示例:

输入: s = "abcdefg", k = 2
输出: "bacdfeg"

要求:

该字符串只包含小写的英文字母。
给定字符串的长度和 k 在[1, 10000]范围内。

C++代码

#include 
#include 
#include 
#include 
using namespace std;
class Solution {
public:
    string reverseStr(string s, int k) {
        int i = 0, j = 0, step = 0, upper = 0, end = 0, size = (int)s.size();
        while (i < size) {
            if (i + k < size) {
                upper = i + k / 2;
                end = i + k - 1;
            } else {
                upper = (size + i) / 2;
                end = size - 1;
            }
            step = 0;
            for (j = i; j < upper; ++j) {
                swap(s[j], s[end - step++]);
            }
            i += 2 * k;
        }
        return s;
    }
};
int main(int argc, const char * argv[]) {
    Solution solution;
    cout << solution.reverseStr("abcdefg", 2) << endl;
    cout << solution.reverseStr("abcdefg", 8) << endl;
    cout << solution.reverseStr("hyzqyljrnigxvdtneasepfahmtyhlohwxmkqcdfehybknvdmfrfvtbsovjbdhevlfxpdaovjgunjqlimjkfnqcqnajmebeddqsgl", 39) << endl;
    return 0;
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-string-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

你可能感兴趣的:(Leetcode541. 反转字符串)