讓我深思的題——LeetCode——1111. 有效括號的嵌套深度

這是LeetCode的一道編程題,本身經驗不足,看題審題花了很多時間,基本實現可是並無經過。編程

一看題解就明白本身想得太多,題目中有太多混亂的信息。數組

我還單純的判斷這兩個()會遇到什麼狀況,而後深度就無法解決。其實這個題主要的即是解決深度,而不是哪一種狀況屬於A,哪一種狀況屬於B。仍是本身作題不夠,不能把握題目的重點。編碼

你們也能夠去看看:https://leetcode-cn.com/problems/maximum-nesting-depth-of-two-valid-parentheses-strings/solution/you-xiao-gua-hao-de-qian-tao-shen-du-by-leetcode-s/spa

題目:code

有效括號字符串 定義:對於每一個左括號,都能找到與之對應的右括號,反之亦然。詳情參見題末「有效括號字符串」部分。blog

嵌套深度 depth 定義:即有效括號字符串嵌套的層數,depth(A) 表示有效括號字符串 A 的嵌套深度。詳情參見題末「嵌套深度」部分。ip

有效括號字符串類型與對應的嵌套深度計算方法以下圖所示:leetcode

 

給你一個「有效括號字符串」 seq,請你將其分紅兩個不相交的有效括號字符串,A 和 B,並使這兩個字符串的深度最小。字符串

不相交:每一個 seq[i] 只能分給 A 和 B 兩者中的一個,不能既屬於 A 也屬於 B 。
A 或 B 中的元素在原字符串中能夠不連續。
A.length + B.length = seq.length
深度最小:max(depth(A), depth(B)) 的可能取值最小。 
劃分方案用一個長度爲 seq.length 的答案數組 answer 表示,編碼規則以下:get

answer[i] = 0,seq[i] 分給 A 。
answer[i] = 1,seq[i] 分給 B 。
若是存在多個知足要求的答案,只需返回其中任意 一個 便可。

示例 1:

輸入:seq = "(()())"
輸出:[0,1,1,1,1,0]
示例 2:

輸入:seq = "()(())()"
輸出:[0,0,0,1,1,0,1,1]
解釋:本示例答案不惟一。
按此輸出 A = "()()", B = "()()", max(depth(A), depth(B)) = 1,它們的深度最小。
像 [1,1,1,0,0,1,1,1],也是正確結果,其中 A = "()()()", B = "()", max(depth(A), depth(B)) = 1 。

提示:

1 < seq.size <= 10000
 

有效括號字符串:

僅由 "(" 和 ")" 構成的字符串,對於每一個左括號,都能找到與之對應的右括號,反之亦然。
下述幾種狀況一樣屬於有效括號字符串:

1. 空字符串
2. 鏈接,能夠記做 AB(A 與 B 鏈接),其中 A 和 B 都是有效括號字符串
3. 嵌套,能夠記做 (A),其中 A 是有效括號字符串
嵌套深度:

相似地,咱們能夠定義任意有效括號字符串 s 的 嵌套深度 depth(S):

1. s 爲空時,depth("") = 0
2. s 爲 A 與 B 鏈接時,depth(A + B) = max(depth(A), depth(B)),其中 A 和 B 都是有效括號字符串
3. s 爲嵌套狀況,depth("(" + A + ")") = 1 + depth(A),其中 A 是有效括號字符串

例如:"","()()",和 "()(()())" 都是有效括號字符串,嵌套深度分別爲 0,1,2,而 ")(" 和 "(()" 都不是有效括號字符串。

來源:力扣(LeetCode)
連接:https://leetcode-cn.com/problems/maximum-nesting-depth-of-two-valid-parentheses-strings

 

Tips:

括號序列 ( ( ) ( ( ) ) ( ) )
下標編號 0 1 2 3 4 5 6 7 8 9
嵌套深度 1 2 2 2 3 3 2 2 2 1

咱們將嵌套深度爲 1 和 3 的全部括號 (()) 分配給 A,嵌套深度爲 2 的全部括號 ()()() 分配給 B

相關文章
相關標籤/搜索