Featured image of post 【Leetcode】python - [856] Score of Parentheses 個人解法筆記

【Leetcode】python - [856] Score of Parentheses 個人解法筆記

整理 LeetCode #856 的個人解法筆記:解題思路、Time/Space Complexity 與邊界條件。

題目出處

856. Score of Parentheses

難度

medium

題目分類

String, Stack, Bracket Sequences

2026-10-06 一刷

個人範例程式碼 - 一刷 (2026/10/06)

class Solution:
    def scoreOfParentheses(self, s: str) -> int:
        score_stack = [] # 存檔處
        cur_score = 0 # 目前工作區
        for c in s:
           if c == '(':
                score_stack.append(cur_score)  # 存檔
                cur_score = 0                  # 開新工作區
           else: # ')'
                prev_score = score_stack.pop()
                # +1 (工作區為 0) or *2 (工作區不為 0)
                if cur_score == 0:
                    cur_score += 1
                else:
                    cur_score = cur_score * 2
                cur_score += prev_score        # 更新上一層工作區總分 (第 0 層為最外層)

        return cur_score

算法說明

最難的地方在於如何把這個字串轉為算式,
首先我們先簡化題型,可以拆成兩個狀態:

  1. 先前的存檔 (已經完成的括弧)
  2. 目前工作區 (未完成的括弧,可能有多層)

看到 ) 會先對目前工作區「+1」(如果目前工作區為 0)或「*2」(目前工作區不為 0),再加回上一層的存檔、合併成上一層的工作區。
看到 ( 我們都開新的工作區 (因為此時我們還不知道結束的右括弧在哪),還有將目前數值存檔。

我們就用這個邏輯進行簡化。

IMG_2250.webp

Time Complexity

O(n)

Space Complexity

O(n) # stack

Licensed under CC BY-NC-SA 4.0
最後更新 Oct 06, 2026
使用 Hugo 建立
主題 Stack 由 Jimmy 設計