105 字 少于 1 分钟阅读

给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。

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

示例:

输入: s = "abcdefg", k = 2
输出: "bacdfeg"

提示:

  1. 该字符串只包含小写英文字母。
  2. 给定字符串的长度和 k[1, 10000] 范围内。

思路

344. 反转字符串一样,使用双指针即可,只是限制一下反转区间

public String reverseStr(String s, int k) {
    int len = s.length();
    char[] arr = s.toCharArray();
    for (int i = 0; i < len; i += 2 * k) {
        int left = i;
        int right = Math.min(i + k - 1, len - 1);
        while (left < right) {
            arr[left] ^= arr[right];
            arr[right] ^= arr[left];
            arr[left] ^= arr[right];
            left++;
            right--;
        }
    }
    return new String(arr);
}