有效括号字符串 仅由 \"(\" 和 \")\" 构成,并符合下述几个条件之一:
空字符串
连接,可以记作 AB(A 与 B 连接),其中 A 和 B 都是有效括x & ^号字符串
嵌套,可以记作 (A),其中 A 是有效括号字符串
类似地,我们可以定义任意有效括号字符串 sC b : ( - p A 的 嵌套深度3 + x = : i o ( depth(S):
s 为空时,depth(\"\") = 0
s 为 A 与 B 连接时,depth(A + B) = max(depth(A), depth(B)),其中 A 和 B 都是有效括号字符串
s 为嵌套情况,depth(\) 5 ^"(\" + A + \")\") = 1 + depth(A),其中 A 是有效括号字符串m ` B { k [ Q
例如:\"\",\"()()\",和 \"()(k C p q z G T()())\" 都是有效括号字符串,嵌套深度分别为 0,1,2,而 \")(\" 和 \"(()f t ~ w 0\" 都不是有效括号字符串。
给你一个有效括号字符串 seq,将其分成两个不相交的子序列 A 和 B,且 A 和 B 满足有: Q & c 1效括号字符串的定义(注意:A.length + B.lengD 5 ? u h b u K Pth = seq.length)。
现在,你需E g M h A要从中选出 任意 一组有效括{ 9 f + V p 4 4号字符串 A 和 B,使, p j 6 q $ ! max(depth(A), depth(B)) 的可能取值最小。
返回长度为 seq.length 答案数组 answer ,选择 A 还是 B 的编码规则是:如果 seqe b 0 y[i] 是 A 的一部分,那么 answer[i] = 0。否则,answer[i] = 1。即便有多个满足要求的答案存在,u W w L r你也只需返回 一个。
示n 7 x G = $ T g 0例 1:
输入w [ S - q e H b ,:seq = \"(()())\"
输出:[0,1,1,1,1,0]
示~ _ b o 9 l , /例 2:
输入:seq = \"()(())()\"
输出:[0,0,0,1,1,0,1,1]
提示:
1 <=C g ! E text.size <= 10000
感觉这是一个语文题,题目X U u Y B 9 _ N &的意思是我们把括号分成两部分,使得每部分的嵌套最少。题目保证给的括号序列是合法的。一提到括号序列,我们最容易想到一种数据结构,那便是栈。* l C 9 g使用栈,我们可以轻松的得出给定序列是否是合法序列,并且每一个括号的匹配情况。当我们遇到一个左括号的时候,便进行入栈,当我们遇到一个右括号的时候,便进行出栈。如果这是一个合法的序列,那么在整一个过程中,我们栈的深度不能为负数,并且最终所有的元素都出栈。
那么这个题目怎么解决呢?不知道大家玩游戏有没有遇到用到过这样的策略,例如你有2个王者号,想打上王者,总是会遇到上了一个段位又掉下来的场景,于是可以用下面这样的策略, 9 i n *每次都玩那个段位低的号。那样子你受到的影响会更小,更容易上王者。这个题目我们也可以用这样的? 6 L M n ? t思想来解决,每当一个来一个左括号的时候,你就安排给两个序列中,未匹配左括号更少的那个,每当遇到一个右括号的时候,你就匹配给未匹. n E配左括号更多的那个,那他c ? i T O n &的括号数-1。基于这样的思想,我们我们想拆成3个甚至10个子序列,都是可以的。下面是一个代码的实& 7 + h 4 X . h现:
然而,这个代码实现得还是有点搓。回顾我们的解决方案,我们w U | s的做法,q q ]就是为了让两个序列更加的均匀,那么,我们何尝不使用更简单的方法呢?我们把所有的左括号排序,把第奇数个左括号分配给第一个序列,把奇数个右括号也分配个第一个序列。偶数序号则分配给第二个序列。因为我们的序列原本就是合法的,所以不用考虑. o = w z 2分配后的结果是不合法的。
本文系本站编辑转载,文章版权归原作者所有,内容为作者个人观点,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请与本站联系,本站将在第一时间删除内容!