Easy草稿★★★★★O(n) 時間 · O(1) 空間
Two PointersString
Patterns↔️ 雙指針
尚未複習過

解法已隱藏 — 先讀題目敘述、自己想想看,再點上方按鈕揭曉。

344Reverse StringTwo PointersEasyTwo Pointers

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

Example:

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

Intuition

TIP

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

Approaches

1. Standard Library — O(n) / O(1)
  • Idea: 直接呼叫 reverse() 函式
  • Time: O(n)
  • Space: O(1)
class Solution {
    fun reverseString(s: CharArray): Unit {
        s.reverse()
    }
}
⭐ 2. Two Pointers Swap — O(n) / O(1)
  • Idea: 左右指針相向移動,交換對應位置的字元
  • Time: O(n) - 遍歷一半的陣列
  • Space: 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--
        }
    }
}

WARNING

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

🔑 Takeaways