0541. Reverse String Ii

541. Reverse String II #

题目 #

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

思路 #

代码 #

class Solution {
    public void reversePart(char[] charArray, int left, int right) {
        while (left < right) {
            char temp = charArray[left];
            charArray[left] = charArray[right];
            charArray[right] = temp;
            
            left += 1;
            right -= 1;
        }
    }
    public String reverseStr(String s, int k) {
        char[] charArray = s.toCharArray();
        
        int cycle = charArray.length / (2 * k);
        for (int i=0; i<cycle; i++) {
            int left = i * (2 * k), right = left + k - 1;
            reversePart(charArray, left, right);
        }
        
        int reminder = charArray.length % (2 * k);
        if (reminder < k) reversePart(charArray, cycle * (2 * k), cycle * (2 * k) + reminder - 1);
        else reversePart(charArray, cycle * (2 * k), cycle * (2 * k) + k - 1);
        
        return String.valueOf(charArray);
    }
}