Monday, March 9, 2020

541. Reverse String II -E

Given a string and an integer k, you need to reverse the first k characters for every 2k characters counting from the start of the string. If there are less than k characters left, reverse all of them. If there are less than 2k but greater than or equal to k characters, then reverse the first k characters and left the other as original.
Example:
Input: s = "abcdefg", k = 2
Output: "bacdfeg"
Restrictions:
  1. The string consists of lower English letters only.
  2. Length of the given string and k will in the range [1, 10000]


A:

class Solution {
public:
    string reverseStr(string s, int k) {
        int n = s.length();
        vector<char> A(n, 'a');
        for(int i = 0; i<n;++i)
        {
            char ch = s[i];
            int base = i/k;
            if(base%2)
            {
                A[i] = s[i];
            }else{
                int j = i - base*k;
                A[min(n, (base+1)*k) - j -1] = ch;
            }
        }
        string res(A.begin(), A.end());
        return res;
    }
};

No comments:

Post a Comment