Description

給定字元陣列 s,原地反轉字串。必須使用 O(1) 額外空間。

Example:

Input: s = [‘h’,’e’,’l’,’l’,‘o’] Output: [‘o’,’l’,’l’,’e’,‘h’]

Intuition#

核心思路:左右指針相向移動,逐一交換字元。

  • 反轉陣列最經典的做法就是首尾交換
  • 兩個指針分別從頭尾出發,向中間靠攏,每步交換

Approaches#

1: 使用標準函式庫#

  • 概念: 直接呼叫 reverse() 函式
  • 時間複雜度: O(n)
  • 空間複雜度: O(1)
class Solution {
    fun reverseString(s: CharArray): Unit {
        s.reverse()
    }
}

⭐2: Two Pointers 交換#

  • 概念: 左右指針相向移動,交換對應位置的字元
  • 時間複雜度: O(n) - 遍歷一半的陣列
  • 空間複雜度: O(1) - 只用兩個指針和一個暫存
class Solution {
    fun reverseString(s: CharArray): Unit {
        var left = 0
        var right = s.size - 1
        while (left < right) {
            val temp = s[left]
            s[left] = s[right]
            s[right] = temp
            left++
            right--
        }
    }
}

Kotlin 的 also 可以讓交換更簡潔:s[left] = s[right].also { s[right] = s[left] },但面試中 temp 變數更清晰。

🔑 Takeaways#

  • Pattern: 相向雙指針交換,是原地反轉的基礎操作
  • 關鍵技巧: 此技巧是許多進階問題的子程序(如反轉句子中的單字、旋轉陣列等)