LeetCode每日一题:删除最外层的括号

玄德 2022-05-28 21:35:11

有效括号字符串为空 ""、"(" + A + ")" 或 A + B ,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。

    例如,"","()","(())()" 和 "(()(()))" 都是有效的括号字符串。

如果有效字符串 s 非空,且不存在将其拆分为 s = A + B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。

给出一个非空有效字符串 s,考虑将其进行原语化分解,使得:s = P_1 + P_2 + ... + P_k,其中 P_i 是有效括号字符串原语。

对 s 进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 s 。

示例 1:

输入:s = "(()())(())"
输出:"()()()"
解释:
输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())",
删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。

示例 2:

输入:s = "(()())(())(()(()))"
输出:"()()()()(())"
解释:
输入字符串为 "(()())(())(()(()))",原语化分解得到 "(()())" + "(())" + "(()(()))",
删除每个部分中的最外层括号后得到 "()()" + "()" + "()(())" = "()()()()(())"。

示例 3:

输入:s = "()()"
输出:""
解释:
输入字符串为 "()()",原语化分解得到 "()" + "()",
删除每个部分中的最外层括号后得到 "" + "" = ""。

提示:

  •     1 <= s.length <= 105
  •     s[i] 为 '(' 或 ')'
  •     s 是一个有效括号字符串

方法一:计数

C:

char * removeOuterParentheses(char * s){
    //申请空间和定义变量
    int len = strlen(s);
    int level = 0, pos = 0;
    char *res = (char *)malloc(sizeof(char) * (len + 1));
    //遍历数组
    for (int i = 0; i < len; i++) {
        char c = s[i];
        if (c == ')') {
            level++;
        }
        //level = 0 时为原语,跳过
        //除0外的number类型数值,其布尔值为true
        if (level) {
            res[pos++] = c;
        }
        if (c == '(') {
            level--;
        }
    }
    res[pos] = '\0';
    return res;
}

题目来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-outermost-parentheses
2022.5.28

...全文
61 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

30,336

社区成员

发帖
与我相关
我的任务
社区描述
打造最热爱学习的高校社区,帮助大家提升计算机领域知识,带大家打比赛拿奖,提高自我,希望大家共同创造良好的社区氛围。
社区管理员
  • 川川菜鸟
  • 亡心灵
  • 星辰菜鸟
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

监督大家学习,每日学习打卡,以投稿形式打卡。扫码关注公众号,可加入粉丝群和领取大量资源。

试试用AI创作助手写篇文章吧