LeetCode 1021 删除最外层的括号

140 阅读1分钟

参加了 kkb 的门徒培训,想要记录下自己的成长过程。每天一篇,坚持不断更 --- 2022.3.25

题目描述

给你一个由 '('')' 和小写字母组成的字符串 s

你需要从字符串中删除最少数目的 '(' 或者 ')' (可以删除任意位置的括号),使得剩下的「括号字符串」有效。

请返回任意一个合法字符串。

有效「括号字符串」应当符合以下 任意一条 要求:

  • 空字符串或只包含小写字母的字符串
  • 可以被写作 ABA 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」
  • 可以被写作 (A) 的字符串,其中 A 是一个有效的「括号字符串」

 

示例 1:

输入: s = "lee(t(c)o)de)"
输出: "lee(t(c)o)de"
解释: "lee(t(co)de)" , "lee(t(c)ode)" 也是一个可行答案。

示例 2:

输入: s = "a)b(c)d"
输出: "ab(c)d"

示例 3:

输入: s = "))(("
输出: ""
解释: 空字符串也是有效的

 

提示:

  • 1 <= s.length <= 105
  • s[i] 可能是 '('')' 或英文小写字母

解题思路

记录 '(' 数量,'(' 数量 大于 1,说明有最外层括号,将其添加入答案

/**
 * @param {string} s
 * @return {string}
 */
var removeOuterParentheses = function(s) {
    // sta 记录'('字符长度,当 length > 1 则说明存在最外层括号, ans 记录答案
    let sta = 0;
    let ans = '';

    for (let str of s) {
        switch (str) {
          case "(":
            sta++;
            ans += sta > 1 ? "(" : "";
            break;
          case ")":
            ans += sta > 1 ? ")" : "";
            sta--;
            break;
          default:
            break;
        }
    }

    return ans;
};