leetcode_541. 反转字符串 II

目录

一、题目内容

给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例:
输入: s = “abcdefg”, k = 2
输出: “bacdfeg”
提示:
该字符串只包含小写英文字母。
给定字符串的长度和 k 在 [1, 10000] 范围内。
leetcode_541. 反转字符串 II

二、题解思路

定义一个变量,用于记录一组中交换的起始位置begin,再一个变量,用于记录一组中要交换的最后一个位置begin+k-1。先判断剩余字符个数len-begin是否小于k个,小于就将最要交换的最后一个位置置为字符串最后一个位置,如果不小于就进行交换,最后更新起始交换位置,让它成为原来的位置加上2*k的位置

三、代码

class Solution {
public:
    string reverseStr(string s, int k) 
    {
        int len = s.size();
        int begin = 0;
        while (begin < len)
        {
            int tmp1 = begin;//起始的交换位置
            int tmp2 = begin + k - 1; //要交换的最后一个位置
            if (len - begin < k)//剩余字符少于 k 个,将剩余字符全部反转
            {
                tmp2 = --len;
            }
            while (tmp1 < tmp2)
            {
                swap(s[tmp1], s[tmp2]);
                ++tmp1;
                --tmp2;
            }
            //更新begin
            begin =begin + 2*k;
        }
        return s;
    }
};
上一篇:${param.name}和${name}的区别


下一篇:2021秋软工实践第一次个人编程作业