題目出處
1111. Maximum Nesting Depth of Two Valid Parentheses Strings
難度
medium
題目分類
String, Stack, Bracket Sequences
2026-09-30 一刷
個人範例程式碼 - 一刷 (2026/09/30)
class Solution:
def maxDepthAfterSplit(self, seq: str) -> list[int]:
ans = []
left_counter = 0 # if counter % 2 == 1, group A(0), else group B(1) (keep depth close)
for c in seq:
if c == '(': # depth + 1
left_counter += 1
ans.append((left_counter - 1) % 2)
if c == ')': # depth - 1
left_counter -= 1
ans.append(left_counter % 2) # close ), use the latest left_counter
return ans
算法說明
個人覺得這題會是 medium 只因為他題目有夠難懂… 實際超級簡單
簡單說,
- 把讀到 ( ) 分成兩 A, B 兩組,答案用 0, 1 來紀錄。 (這裡同樣概念就重複了一次,造成混亂原因之一)
- 至於怎麼分組,依照深度平均分,深度的意思就是未完成的括弧數量。(簡單說就是只有左括弧,還沒有右括弧)
因此,我們可以用奇偶性來處理,以下講的 0, 1 就是題目的 A, B 兩組,
用一個例子來看,我們用一個左括號計數器 left_counter:
- ( :left_counter + 1, 第 0 組
- ( :left_counter + 1, 第 1 組
到這裡我們知道可以由 (left_counter -1) % 2 推得左括號組別
再來是右括弧處理方式:
- ) :left_counter - 1, 先配對計數器中的最後一個,所以要給第 1 組
- ) :left_counter - 1, 配對計數器中的最後一個 (這裡剛好也是剩下的那個),給第 0 組
到這裡我們知道可以由 「left_counter % 2」推得右括弧的組別,留意沒有了 -1,這樣才能配對正確的左括弧。
Time Complexity
O(n) # 掃一次
Space Complexity
不計輸出陣列是 O(1),計入輸出陣列則是 O(n)