1. 程式人生 > >leetcode:541反轉字串

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;
    }
};