原题
字符串简单1 种解法

#344反转字符串

原地反转字符数组,不能分配另一份字符数组。

#字符串#双指针

原题

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

示例 1:

输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]

示例 2:

输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

提示:

  • 1 <= s.length <= 105
  • s[i] 都是 ASCII 码表中的可打印字符

查看原题

解题主线

  1. 首尾双指针交换后同时向中间移动,每个字符最多参与一次交换。

解法 1:首尾双指针

不断交换对称位置字符,直到指针相遇。

  • 时间复杂度: O(n)

  • 空间复杂度: O(1)

JAVA
final class Solution {
    public void reverseString(char[] s) {
        int left = 0, right = s.length - 1;
        // 循环外侧区间已完成反转,只交换尚未处理的首尾字符
        while (left < right) {
            char temporary = s[left];
            // 交换后双指针同步向中间收缩,相遇位置无需处理
            s[left++] = s[right];
            s[right--] = temporary;
        }
    }
}

边界与易错点

  • 循环条件是 left < right;相遇位置无需交换。
  • 题目要求原地修改,不能只返回新字符串。

整理来源

由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。

  • str/Q344_reverseString.java