mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-01-11 02:58:13 +08:00
76 lines
3.9 KiB
HTML
76 lines
3.9 KiB
HTML
<p><strong>有效括号字符串 </strong>定义:对于每个左括号,都能找到与之对应的右括号,反之亦然。详情参见题末「<strong>有效括号字符串</strong>」部分。</p>
|
||
|
||
<p><strong>嵌套深度</strong> <code>depth</code> 定义:即有效括号字符串嵌套的层数,<code>depth(A)</code> 表示有效括号字符串 <code>A</code> 的嵌套深度。详情参见题末「<strong>嵌套深度</strong>」部分。</p>
|
||
|
||
<p>有效括号字符串类型与对应的嵌套深度计算方法如下图所示:</p>
|
||
|
||
<p><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2020/04/01/1111.png" style="height: 152px; width: 600px;"></p>
|
||
|
||
<p> </p>
|
||
|
||
<p>给你一个「有效括号字符串」 <code>seq</code>,请你将其分成两个不相交的有效括号字符串,<code>A</code> 和 <code>B</code>,并使这两个字符串的深度最小。</p>
|
||
|
||
<ul>
|
||
<li>不相交:每个 <code>seq[i]</code> 只能分给 <code>A</code> 和 <code>B</code> 二者中的一个,不能既属于 <code>A</code> 也属于 <code>B</code> 。</li>
|
||
<li><code>A</code> 或 <code>B</code> 中的元素在原字符串中可以不连续。</li>
|
||
<li><code>A.length + B.length = seq.length</code></li>
|
||
<li>深度最小:<code>max(depth(A), depth(B))</code> 的可能取值最小。 </li>
|
||
</ul>
|
||
|
||
<p>划分方案用一个长度为 <code>seq.length</code> 的答案数组 <code>answer</code> 表示,编码规则如下:</p>
|
||
|
||
<ul>
|
||
<li><code>answer[i] = 0</code>,<code>seq[i]</code> 分给 <code>A</code> 。</li>
|
||
<li><code>answer[i] = 1</code>,<code>seq[i]</code> 分给 <code>B</code> 。</li>
|
||
</ul>
|
||
|
||
<p>如果存在多个满足要求的答案,只需返回其中任意 <strong>一个 </strong>即可。</p>
|
||
|
||
<p> </p>
|
||
|
||
<p><strong>示例 1:</strong></p>
|
||
|
||
<pre><strong>输入:</strong>seq = "(()())"
|
||
<strong>输出:</strong>[0,1,1,1,1,0]
|
||
</pre>
|
||
|
||
<p><strong>示例 2:</strong></p>
|
||
|
||
<pre><strong>输入:</strong>seq = "()(())()"
|
||
<strong>输出:</strong>[0,0,0,1,1,0,1,1]
|
||
<strong>解释:</strong>本示例答案不唯一。
|
||
按此输出 A = "()()", B = "()()", max(depth(A), depth(B)) = 1,它们的深度最小。
|
||
像 [1,1,1,0,0,1,1,1],也是正确结果,其中 A = "()()()", B = "()", max(depth(A), depth(B)) = 1 。
|
||
</pre>
|
||
|
||
<p> </p>
|
||
|
||
<p><strong>提示:</strong></p>
|
||
|
||
<ul>
|
||
<li><code>1 < seq.size <= 10000</code></li>
|
||
</ul>
|
||
|
||
<p> </p>
|
||
|
||
<p><strong>有效括号字符串:</strong></p>
|
||
|
||
<pre>仅由 <code>"("</code> 和 <code>")"</code> 构成的字符串,对于每个左括号,都能找到与之对应的右括号,反之亦然。
|
||
下述几种情况同样属于有效括号字符串:
|
||
|
||
1. 空字符串
|
||
2. 连接,可以记作 <code>AB</code>(<code>A</code> 与 <code>B</code> 连接),其中 <code>A</code> 和 <code>B</code> 都是有效括号字符串
|
||
3. 嵌套,可以记作 <code>(A)</code>,其中 <code>A</code> 是有效括号字符串
|
||
</pre>
|
||
|
||
<p><strong>嵌套深度:</strong></p>
|
||
|
||
<pre>类似地,我们可以定义任意有效括号字符串 <code>s</code> 的 <strong>嵌套深度</strong> <code>depth(S)</code>:
|
||
|
||
1.<code> s</code> 为空时,<code>depth("") = 0</code>
|
||
<code> 2. s</code> 为 <code>A</code> 与 <code>B</code> 连接时,<code>depth(A + B) = max(depth(A), depth(B))</code>,其中 <code>A</code> 和 <code>B</code> 都是有效括号字符串
|
||
<code> 3. s</code> 为嵌套情况,<code>depth("(" + A + ")") = 1 + depth(A)</code>,其中 <code>A</code> 是有效括号字符串
|
||
|
||
例如:<code>""</code>,<code>"()()"</code>,和 <code>"()(()())"</code> 都是有效括号字符串,嵌套深度分别为 0,1,2,而 <code>")("</code> 和 <code>"(()"</code> 都不是有效括号字符串。
|
||
</pre>
|