344. 反转字符串

核心思路

\(s\) 长度为 \(n\)。反转可以看成是交换 \(s[0]\)\(s[n-1]\),交换 \(s[1]\)\(s[n-2]\),交换 \(s[2]\)\(s[n-3]\),依此类推。

双指针写法

初始化两个指针 \(left=0\)\(right=n-1\) 表示需要交换的位置。每次交换后,将指针向中间移动,\(left\) 加一,\(right\) 减一。

什么时候退出循环呢?

  • 如果 \(n\) 是奇数,最终 \(left = right = \left\lfloor \frac{n}{2} \right\rfloor\),无需交换。
  • 如果 \(n\) 是偶数,最后交换的是 \(left = \frac{n}{2} - 1\) 以及 \(right = \frac{n}{2}\),然后各移动一位变成 \(left = \frac{n}{2}\)\(right = \frac{n}{2} - 1\),退出循环。

综上所述,当 \(left \ge right\) 时,所有字符交换完毕,退出循环。

class Solution {
    public void reverseString(char[] s) {
        int n = s.length;
        for (int left = 0, right = n - 1; left < right; left++, right--) {
            char tmp = s[left];
            s[left] = s[right];
            s[right] = tmp;
        }
    }
}
posted @ 2026-04-14 14:06  可以解决问题不大  阅读(5)  评论(0)    收藏  举报