1111 有效括號的巢狀深度

2022-05-08 21:45:11 字數 1177 閱讀 7461

有效括號字串 僅由 "(" 和 ")" 構成,並符合下述幾個條件之一:

空字串

連線,可以記作 ab(a 與 b 連線),其中 a 和 b 都是有效括號字串

巢狀,可以記作 (a),其中 a 是有效括號字串

類似地,我們可以定義任意有效括號字串 s 的 巢狀深度 depth(s):

s 為空時,depth("") = 0

s 為 a 與 b 連線時,depth(a + b) = max(depth(a), depth(b)),其中 a 和 b 都是有效括號字串

s 為巢狀情況,depth("(" + a + ")") = 1 + depth(a),其中 a 是有效括號字串

例如:"","()()",和 "()(()())" 都是有效括號字串,巢狀深度分別為 0,1,2,而 ")(" 和 "(()" 都不是有效括號字串。

給你乙個有效括號字串 seq,將其分成兩個不相交的子串行 a 和 b,且 a 和 b 滿足有效括號字串的定義(注意:a.length + b.length = seq.length)。

現在,你需要從中選出 任意 一組有效括號字串 a 和 b,使 max(depth(a), depth(b)) 的可能取值最小。

返回長度為 seq.length 答案陣列 answer ,選擇 a 還是 b 的編碼規則是:如果 seq[i] 是 a 的一部分,那麼 answer[i] = 0。否則,answer[i] = 1。即便有多個滿足要求的答案存在,你也只需返回 乙個。

示例 1:

輸入:seq = "(()())"

輸出:[0,1,1,1,1,0]

示例 2:

輸入:seq = "()(())()"

輸出:[0,0,0,1,1,0,1,1]

1 <= text.size <= 10000

解答:括號深度用棧遍歷字串就可以得到。(這種有效括號的題目好像都可以用棧來做)

class

solution

else

else}}

//coutreturn

res;

}};

官方題解的,用變數模擬棧的遍歷:

class

solution

else

}return

res;

}};

1111 有效括號的巢狀深度

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

1111 有效括號的巢狀深度

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

棧 1111 有效括號的巢狀深度

思路 維護乙個棧s,從左至右遍歷括號字串中的每乙個字元 如果當前字元是 就把 壓入棧中,此時這個 的巢狀深度為棧的高度 如果當前字元是 此時這個 的巢狀深度為棧的高度,隨後再從棧中彈出乙個 下面給出了括號序列 在每乙個字元處的巢狀深度 括號序列 下標編號 0 1 2 3 4 5 6 7 8 9 巢狀...