棧 1111 有效括號的巢狀深度

2022-09-24 03:30:14 字數 933 閱讀 9299

思路:維護乙個棧s,從左至右遍歷括號字串中的每乙個字元:

如果當前字元是(,就把(壓入棧中,此時這個(的巢狀深度為棧的高度;

如果當前字元是),此時這個)的巢狀深度為棧的高度,隨後再從棧中彈出乙個(

下面給出了括號序列(()(())())在每乙個字元處的巢狀深度:

括號序列   ( ( ) ( ( ) ) ( ) )

下標編號 0 1 2 3 4 5 6 7 8 9

巢狀深度 1 2 2 2 3 3 2 2 2 1

知道如何計算巢狀深度,問題就很簡單了:只要在遍歷過程中,我們保證棧內一半的括號屬於序列 a,一半的括號屬於序列 b,那麼就能保證拆分後最大的巢狀深度最小,是當前最大巢狀深度的一半。要實現這樣的對半分配,我們只需要把奇數層的 ( 分配給 a,偶數層的 ( 分配給 b 即可。對於上面的例子,我們將巢狀深度為 1 和 3 的所有括號 (()) 分配給 a,巢狀深度為 2 的所有括號 ()()() 分配給 b。

class solution  else if (chs[i] == ')') 

}return ans;

}public static void main(string args)

}

1111 有效括號的巢狀深度

有效括號字串 僅由 和 構成,並符合下述幾個條件之一 空字串 連線,可以記作 ab a 與 b 連線 其中 a 和 b 都是有效括號字串 巢狀,可以記作 a 其中 a 是有效括號字串 類似地,我們可以定義任意有效括號字串 s 的 巢狀深度 depth s s 為空時,depth 0 s 為 a 與 ...

1111 有效括號的巢狀深度

有效括號字串 僅由 和 構成,並符合下述幾個條件之一 空字串 連線,可以記作 ab a 與 b 連線 其中 a 和 b 都是有效括號字串 巢狀,可以記作 a 其中 a 是有效括號字串 類似地,我們可以定義任意有效括號字串 s 的 巢狀深度 depth s s 為空時,depth 0 s 為 a 與 ...

1111 有效括號的巢狀深度

括號匹配的問題一般都是根據棧來實現的,棧內放入括號進行匹配。文中具體思路見leetcode解析。知道如何計算巢狀深度,問題就很簡單了 只要在遍歷過程中,我們保證棧內一半的括號屬於序列 a,一半的括號屬於序列 b,那麼就能保證拆分後最大的巢狀深度最小,是當前最大巢狀深度的一半。要實現這樣的對半分配,我...