LeetCode 541. 反转字符串 II

题目描述

541. 反转字符串 II

image-20230312173133893

思路分析

解法一:分段反转(推荐)

核心思路

  • 每 2k 个字符为一组,只反转前 k 个字符。
  • 若剩余字符不足 k,则全部反转;若介于 k 和 2k 之间,仅反转前 k。
  • 使用字符数组便于原地交换。


复杂度分析

  • 时间复杂度:O(n),其中 n 表示字符串长度。
  • 空间复杂度:O(n),使用字符数组存储。
class Solution {
    public String reverseStr(String s, int k) {
        char[] chars = s.toCharArray();

        for (int start = 0; start < chars.length; start += 2 * k) {
            int left = start;
            int right = Math.min(start + k - 1, chars.length - 1);

            while (left < right) {
                char temp = chars[left];
                chars[left] = chars[right];
                chars[right] = temp;
                left++;
                right--;
            }
        }

        return new String(chars);
    }
}
func reverseStr(s string, k int) string {
	chars := []byte(s)

	for start := 0; start < len(chars); start += 2 * k {
		left := start
		right := start + k - 1
		if right >= len(chars) {
			right = len(chars) - 1
		}

		for left < right {
			chars[left], chars[right] = chars[right], chars[left]
			left++
			right--
		}
	}

	return string(chars)
}

相似题目

题目 难度 考察点
344. 反转字符串 简单 双指针
345. 反转字符串中的元音字母 简单 双指针
557. 反转字符串中的单词 III 简单 字符串
151. 反转字符串里的单词 中等 字符串
186. 反转字符串中的单词 II 中等 双指针
本文作者:
本文链接: https://hgnulb.github.io/blog/2025/12124492
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!