↓快轉到主要內容
  1. LeetCode/

LeetCode 3794: Reverse String Prefix

·1 分鐘· ·
LeetCode Easy Two-Pointers String
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2026-01-03

  • 提交紀錄:Accepted(切片)→ Runtime Error ×2 → Accepted(雙指針,2026-01-24)

解題思路
#

把前 k 個字元反轉。Python 切片一行就能解決:s[:k][::-1] + s[k:]。

我的嘗試:改用雙指針練習
#

一月底回來用雙指針重寫,連續兩次 Runtime Error:

  1. right = len(k) - 1:k 是整數,不能取 len,應該是 k - 1。
  2. 修好之後,s[left], s[right] = s[right], s[left] 又出錯:Python 的字串不能修改,要先 list(s),最後再 "".join(...)。

正確解法
#

class Solution:
    def reversePrefix(self, s: str, k: int) -> str:
        chars = list(s)
        left, right = 0, k - 1
        while left < right:
            chars[left], chars[right] = chars[right], chars[left]
            left += 1
            right -= 1
        return "".join(chars)

複雜度
#

時間 O(n),空間 O(n)(字串不可變,一定要建新的)。

要特別避免的錯誤
#

  • 直接修改字串的字元:Python 字串不可變。
  • 對整數呼叫 len。

面試口說整理
#

Python 的字串不可變,所以我先轉成 list,用兩個指針從第 0 個和第 k - 1 個往中間交換,最後再接回字串。也可以直接用切片 s[:k][::-1] + s[k:],兩種都是 O(n)。

相關文章

LeetCode 1768: Merge Strings Alternately
·1 分鐘
LeetCode Easy Two-Pointers String
LeetCode 1768 解題筆記:兩個指針輪流取字元,短的用完後接上長的剩下部分
LeetCode 917: Reverse Only Letters
·1 分鐘
LeetCode Easy Two-Pointers String
LeetCode 917 解題筆記:左右指針各自跳過非字母,兩邊都是字母時交換;字串要先轉成 list 才能改
LeetCode 925: Long Pressed Name
·1 分鐘
LeetCode Easy Two-Pointers String
LeetCode 925 解題筆記:兩個指標分別走 name 和 typed,typed 的字元要嘛對到 name 的下一個字,要嘛是前一個字的長按
LeetCode 821: Shortest Distance to a Character
·1 分鐘
LeetCode Easy Array Two-Pointers String
LeetCode 821 解題筆記:左往右掃一次記錄到左邊最近的 c 的距離,右往左再掃一次取較小值
LeetCode 844: Backspace String Compare
·1 分鐘
LeetCode Easy Two-Pointers String Stack Simulation
LeetCode 844 解題筆記:用 stack 模擬退格;O(1) 空間的話從尾巴往前,遇到 # 就記下要跳過幾個字元
LeetCode 680: Valid Palindrome II
·1 分鐘
LeetCode Easy Two-Pointers String Greedy
LeetCode 680 解題筆記:左右指針遇到第一對不同時,只有兩種刪法:刪左邊或刪右邊,檢查剩下的是否為回文