首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >LeetCode 1111. 有效括号的嵌套深度(奇偶分离)

LeetCode 1111. 有效括号的嵌套深度(奇偶分离)

作者头像
Michael阿明
发布2020-07-13 15:45:13
发布2020-07-13 15:45:13
7130
举报

1. 题目

有效括号字符串 仅由 "("")" 构成,并符合下述几个条件之一:

  • 空字符串
  • 连接,可以记作 AB(A 与 B 连接),其中 A 和 B 都是有效括号字符串
  • 嵌套,可以记作 (A),其中 A 是有效括号字符串

类似地,我们可以定义任意有效括号字符串 s 的 嵌套深度 depth(S):

  • s 为空时,depth("") = 0
  • s 为 A 与 B 连接时,depth(A + B) = max(depth(A), depth(B)),其中 A 和 B 都是有效括号字符串
  • s 为嵌套情况,depth("(" + A + ")") = 1 + depth(A),其中 A 是有效括号字符串 例如:"","()()",和 "()(()())" 都是有效括号字符串,嵌套深度分别为 0,1,2,而 ")(" 和 "(()" 都不是有效括号字符串。

给你一个有效括号字符串 seq,将其分成两个不相交的子序列 A 和 B,且 A 和 B 满足有效括号字符串的定义(注意:A.length + B.length = seq.length)。

现在,你需要从中选出 任意 一组有效括号字符串 A 和 B,使 max(depth(A), depth(B)) 的可能取值最小

返回长度为 seq.length 答案数组 answer ,选择 A 还是 B 的编码规则是:如果 seq[i] 是 A 的一部分,那么 answer[i] = 0。否则,answer[i] = 1。 即便有多个满足要求的答案存在,你也只需返回 一个。

代码语言:javascript
复制
示例 1:
输入:seq = "(()())"
输出:[0,1,1,1,1,0]

示例 2:
输入:seq = "()(())()"
输出:[0,0,0,1,1,0,1,1]
 
提示:
1 <= text.size <= 10000

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-nesting-depth-of-two-valid-parentheses-strings 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 题目意思是,尽可能的让拆开的两个括号的 最大嵌套深度 最小
  • 那就按照深度分成奇数层、偶数层,分别拿出来就行了
代码语言:javascript
复制
class Solution {
public:
    vector<int> maxDepthAfterSplit(string seq) {
    	int i, j = 0, depth = 0;
    	vector<int> ans(seq.size(),0);
        char prev = '*';
    	for(i = 0; i < seq.size(); ++i,++j)
    	{
            if(prev == ')')
                depth--;
    		if(seq[i] == '(')
    			depth++;
    		if(depth & 1)//奇数层
                ans[j] = 1;
            prev = seq[i];
            // cout << depth << " ";
    	}
    	return ans;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档