【Leetcode】python - [1111] Maximum Nesting Depth of Two Valid Parentheses Strings 個人解法筆記

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

題目出處

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 只因為他題目有夠難懂… 實際超級簡單
簡單說,

  1. 把讀到 ( ) 分成兩 A, B 兩組,答案用 0, 1 來紀錄。 (這裡同樣概念就重複了一次,造成混亂原因之一)
  2. 至於怎麼分組,依照深度平均分,深度的意思就是未完成的括弧數量。(簡單說就是只有左括弧,還沒有右括弧)

因此,我們可以用奇偶性來處理,以下講的 0, 1 就是題目的 A, B 兩組,
用一個例子來看,我們用一個左括號計數器 left_counter:

  1. ( :left_counter + 1, 第 0 組
  2. ( :left_counter + 1, 第 1 組

到這裡我們知道可以由 (left_counter -1) % 2 推得左括號組別

再來是右括弧處理方式:

  1. ) :left_counter - 1, 先配對計數器中的最後一個,所以要給第 1 組
  2. ) :left_counter - 1, 配對計數器中的最後一個 (這裡剛好也是剩下的那個),給第 0 組

到這裡我們知道可以由 「left_counter % 2」推得右括弧的組別,留意沒有了 -1,這樣才能配對正確的左括弧。

Time Complexity

O(n) # 掃一次

Space Complexity

不計輸出陣列是 O(1),計入輸出陣列則是 O(n)

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