題目出處
難度
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」(如果目前工作區為 0)或「*2」(目前工作區不為 0),再加回上一層的存檔、合併成上一層的工作區。
看到 ( 我們都開新的工作區 (因為此時我們還不知道結束的右括弧在哪),還有將目前數值存檔。
我們就用這個邏輯進行簡化。

Time Complexity
O(n)
Space Complexity
O(n) # stack