参加了 kkb 的门徒培训,想要记录下自己的成长过程。每天一篇,坚持不断更 --- 2022.3.25
题目描述
给你一个由 '('、')' 和小写字母组成的字符串 s。
你需要从字符串中删除最少数目的 '(' 或者 ')' (可以删除任意位置的括号),使得剩下的「括号字符串」有效。
请返回任意一个合法字符串。
有效「括号字符串」应当符合以下 任意一条 要求:
- 空字符串或只包含小写字母的字符串
- 可以被写作
AB(A连接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 <= 105s[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;
};