leetcode:541反转字符串

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

class Solution {
public:
    string reverseStr(string s, int k) {
        if(k==1)
        {
            return s;
        }
        int size=s.size();
        int begin=0;
        int end=begin+k-1;
        int tmp=size/(2*k);//l
        while(tmp--)
        {
            int flag=end;
            while(begin<end)
            {
                swap(s[begin],s[end]);
                begin++;
                end--;
            }
            begin=flag+k+1;
            end=begin+k-1;
        }
        int flag=size-begin;
        if(flag>k&&flag<(2*k))
        {
            while(begin<end)
            {
                swap(s[begin],s[end]);
                begin++;
                end--;
            }
        }
        if(flag<=k)
        {
            end=size-1;
            while(begin<end)
            {
                swap(s[begin],s[end]);
                begin++;
                end--;
            }
        }
        return s;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_40853073/article/details/83825024
今日推荐