Tags: "leetcode", "two-pointers", access_time 1-min read

Edit this post on Github

Reverse String II

Created: March 12, 2020 by [lek-tin]

Last updated: March 12, 2020

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:
The string consists of lower English letters only.
Length of the given string and k will in the range [1, 10000]

Solution

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        start = 0
        N = len(s)
        s = list(s)

        while start < N:
            left, right = start, min(start+k-1, N-1)
            start += 2*k
            while left < right:
                temp = s[right]
                s[right] = s[left]
                s[left] = temp
                left += 1
                right -= 1

        return "".join(s)