思路:維護乙個棧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,那麼就能保證拆分後最大的巢狀深度最小,是當前最大巢狀深度的一半。要實現這樣的對半分配,我...