1021. 删除最外层的括号(2022-5-28)
有效括号字符串为空 “”、“(” + 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 <= 10^5
- s[i] 为 ‘(’ 或 ‘)’
- s 是一个有效括号字符串
解题思路
这题有些难懂,总结下来的意思是挨在一起的或者去除最外层的(和)是一对有效括号,我们要统计他们的括号的数量。
既然如此,计数就完了,一对括号对应一加一减,相当于0,初始为-1只要过滤掉最外层括号,里边的累积起来就好了,如果碰到第二个外层括号,计数此时会是0,也就会过滤掉。
var removeOuterParentheses = function(s) {
let ret = '', cnt = -1
for(let i = 0; i < s.length; i ++){
if(s[i] === '(') cnt ++
if(cnt) ret += s[i]
if(s[i] === ')') cnt --
}
return ret
};
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-outermost-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
该博客介绍了LeetCode上的题目1021,即删除最外层括号。通过原语化分解有效括号字符串并删除最外层括号,返回新的字符串。文章提供了示例解析和解题思路,强调了如何计算括号数量来解决问题。
2525

被折叠的 条评论
为什么被折叠?



