Python中两个有效括号字符串的最大嵌套深度
假设我们有一个字符串,当且仅当该字符串仅由“(”和“)”字符组成且满足这些属性时,该字符串才是有效的括号字符串(表示为VPS)-
它是空字符串,或者
可以写为AB,其中A和B是VPS,或者
它可以表示为(A),其中A是VPS。
我们还可以定义任何VPS S的嵌套深度depth(S),如下所示-
depth(“”)= 0
depth(A + B)=深度(A),深度(B)的最大值,其中A和B是VPS
depth(“(” + A +“)”)= 1 + depth(A),其中A是VPS。
如果我们有一个VPS序列,我们必须将其分成两个不相交的子序列A和B,这样A和B就是VPS的序列(且A的长度+ B的长度=序列的长度)。现在,如果我们选择任何这样的A和B以使max(depth(A),depth(B))是最小可能值。然后,我们必须找到一个编码为A和B的答案数组(长度为seq):如果seq [i]是A的一部分,则answer [i] = 0,否则为answer [i] = 1。
因此,如果输入类似于“(()(())()”),则输出将为[1,1,1,0,1,0,1,1,1]
为了解决这个问题,我们将遵循以下步骤-
n:= seq的长度,res:=长度为n的0数组
c1,c2:= 0,0
对于i,范围为0至n – 1
如果c1> c2,则将c1减1,否则将c2减1并res [i]:= 1
如果c1 <c2,则将c1加1,否则将c2加1并res [i]:= 1
如果seq [i] ='('
除此以外
返回资源
让我们看下面的实现以更好地理解-
示例
class Solution(object):def maxDepthAfterSplit(self, seq):
n = len(seq)
res = [0] *n
c1,c2= 0,0
for i in range(n):
if seq[i] == '(':
if c1<c2:
c1+=1
else:
c2+=1
res[i]=1
else:
if c1>c2:
c1-=1
else:
c2-=1
res[i]=1
return res
ob = Solution()print(ob.maxDepthAfterSplit("()(())()"))
输入值
"()(())()"
输出结果
[1, 1, 1, 0, 1, 0, 1, 1]
以上是 Python中两个有效括号字符串的最大嵌套深度 的全部内容, 来源链接: utcz.com/z/345458.html