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

LeetCode 541: Reverse String II

·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 第一次嘗試:2022-08-25

  • 提交紀錄:Wrong Answer ×2 → Runtime Error → Wrong Answer ×2 → Runtime Error → Accepted → Runtime Error ×2 → Wrong Answer ×2 → Accepted

解題思路
#

從 0 開始每次跳 2k,把 [i, i + k) 反轉(Two Pointers 模板一)。最後剩不到 k 個時題目要求全部反轉,用切片 a[i:i + k] 超出範圍會自動截斷,剛好符合。

我的嘗試
#

2022 年的版本只反轉了第一段的前 k 個,例如 "cddebd"、k = 2:答案 "dcdedb",回傳 "dcdebd"。2026 年重寫時條件寫成 i + k <= n 才反轉,剩不到 k 個的最後一段沒有反轉,例如 "cd"、k = 4:答案 "dc",回傳 "cd"。

正確解法
#

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        a = list(s)
        for i in range(0, len(a), 2 * k):
            a[i:i + k] = reversed(a[i:i + k])
        return "".join(a)

複雜度
#

時間 O(n),空間 O(n)。

要特別避免的錯誤
#

  • 不是只有第一段,是每 2k 一段都要做。
  • 剩不到 k 個也要反轉。

面試口說整理
#

我每 2k 個跳一次,把每段的前 k 個反轉,最後一段不夠 k 個時切片會自動只反轉剩下的。時間 O(n)。

相關文章

LeetCode 344: Reverse String
·1 分鐘
LeetCode Easy Two-Pointers String
LeetCode 344 解題筆記:左右指針交換後往中間走,原地反轉
LeetCode 392: Is Subsequence
·1 分鐘
LeetCode Easy Two-Pointers String Dynamic-Programming
LeetCode 392 解題筆記:兩個指針,t 的指針一直往前,對上 s 的字元時 s 的指針也前進;兩邊的邊界都要檢查
LeetCode 125: Valid Palindrome
·1 分鐘
LeetCode Easy Two-Pointers String
LeetCode 125 解題筆記:左右指針跳過非英數字元,再比較小寫是否相同;數字也要算進去
LeetCode 28: Find the Index of the First Occurrence in a String
·1 分鐘
LeetCode Easy Two-Pointers String String-Matching Z-Algorithm
LeetCode 28 解題筆記:在每個起點比對 needle,或直接用 str.find;index 找不到會丟例外
LeetCode 345: Reverse Vowels of a String
·1 分鐘
LeetCode Easy Two-Pointers String
LeetCode 345 解題筆記:跟 LC 917 一樣的左右指針,只是條件換成「是不是母音」(大小寫都要算)
LeetCode 504: Base 7
·1 分鐘
LeetCode Easy Math String
LeetCode 504 解題筆記:對絕對值不斷取 % 7 和 // 7,最後加上負號並反轉;0 要特別處理