1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-01-10 18:48:13 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
leetcode-problemset/leetcode-cn/problem (Chinese)/有效括号的嵌套深度 [maximum-nesting-depth-of-two-valid-parentheses-strings].html
2022-03-29 12:43:11 +08:00

76 lines
3.9 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>&nbsp;</p>
<p>给你一个「有效括号字符串」 <code>seq</code>,请你将其分成两个不相交的有效括号字符串,<code>A</code>&nbsp;<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>&nbsp;的可能取值最小。&nbsp;</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>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>seq = &quot;(()())&quot;
<strong>输出:</strong>[0,1,1,1,1,0]
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>seq = &quot;()(())()&quot;
<strong>输出:</strong>[0,0,0,1,1,0,1,1]
<strong>解释:</strong>本示例答案不唯一。
按此输出 A = &quot;()()&quot;, B = &quot;()()&quot;, max(depth(A), depth(B)) = 1它们的深度最小。
像 [1,1,1,0,0,1,1,1],也是正确结果,其中 A = &quot;()()()&quot;, B = &quot;()&quot;, max(depth(A), depth(B)) = 1 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;&nbsp;seq.size &lt;= 10000</code></li>
</ul>
<p>&nbsp;</p>
<p><strong>有效括号字符串:</strong></p>
<pre>仅由&nbsp;<code>&quot;(&quot;</code>&nbsp;<code>&quot;)&quot;</code>&nbsp;构成的字符串,对于每个左括号,都能找到与之对应的右括号,反之亦然。
下述几种情况同样属于有效括号字符串:
1. 空字符串
2. 连接,可以记作&nbsp;<code>AB</code><code>A</code><code>B</code> 连接),其中&nbsp;<code>A</code>&nbsp;&nbsp;<code>B</code>&nbsp;都是有效括号字符串
3. 嵌套,可以记作&nbsp;<code>(A)</code>,其中&nbsp;<code>A</code>&nbsp;是有效括号字符串
</pre>
<p><strong>嵌套深度:</strong></p>
<pre>类似地,我们可以定义任意有效括号字符串 <code>s</code><strong>嵌套深度</strong>&nbsp;<code>depth(S)</code>
1.<code> s</code> 为空时,<code>depth(&quot;&quot;) = 0</code>
<code> 2. s</code><code>A</code><code>B</code> 连接时,<code>depth(A + B) = max(depth(A), depth(B))</code>,其中&nbsp;<code>A</code>&nbsp;<code>B</code>&nbsp;都是有效括号字符串
<code> 3. s</code> 为嵌套情况,<code>depth(&quot;(&quot; + A + &quot;)&quot;) = 1 + depth(A)</code>,其中 <code>A</code> 是有效括号字符串
例如:<code>&quot;&quot;</code><code>&quot;()()&quot;</code>,和&nbsp;<code>&quot;()(()())&quot;</code>&nbsp;都是有效括号字符串,嵌套深度分别为 012&nbsp;<code>&quot;)(&quot;</code>&nbsp;<code>&quot;(()&quot;</code>&nbsp;都不是有效括号字符串。
</pre>