leetcode 1111. 有效括号的嵌套深度

1111. 有效括号的嵌套深度

有效括号字符串 定义:对于每个左括号,都能找到与之对应的右括号

有效括号字符串类型与对应的嵌套深度计算方法如下图所示:

给你一个「有效括号字符串」 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 表示,编码规则如下:

answer[i] = 0,seq[i] 分给 A 

answer[i] = 1,seq[i] 分给 B 

如果存在多个满足要求的答案,只需返回其中任意 一个 即可。

 

 

题解:

1.对一个有效括号字符串进行划分

2.用0,1编码表示出深度来

 

 

示例 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

 

解题思路:

题目实际是给字符串进行编码并返回编码序列。题目要求只有0和1进行编码为表示出深度,可以把一个深度的括号编码为1种,或0或1.不同深度之间不用相同的编码。

  • 括号字符串一定从左括号开始,不防把第一层左括号用0来编码

  • 以后各层相邻深度之间不用相同编码

  • 在遍历字符时左括号有可能是第一层,也可能是其它层,根据字符下标来判断,index%2赋值

  • 右括号是同层左括号的结束,要和同层的第一个左括号使用的编码相同(index+1)%2赋值

C/C++题解(点击蓝字即可阅读源码,或前往公众号回复“1111”获取)

Java题解(点击蓝字即可阅读源码,或前往公众号回复“1111”获取)

Python题解(点击蓝字即可阅读源码,或前往公众号回复“1111”获取)

更多题解可前往公众号免费获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值