[toc] leetcode 1021. 删除最外层的括号
题目描述
- 删除最外层的括号
有效括号字符串为空 ""、"(" + 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 是一个有效括号字符串
解题思路
法1
计数:
遍历输入字符串 s 中的每个字符,并使用一个计数器 count 来记录当前遍历到的括号的层数。
如果遇到左括号 '(',并且计数器 count 大于 0,表示该左括号不是最外层的括号,需要将其添加到结果字符串 result 中。
如果遇到右括号 ')',则将计数器 count 减 1,并且如果计数器 count 大于 0,表示该右括号不是最外层的括号,需要将其添加到结果字符串 result 中。
最终,遍历完整个字符串后,结果字符串 result 中就是去除了最外层括号的字符串。
- 时间复杂度(O())
- 空间复杂度(O())
执行结果
法1
func removeOuterParentheses(s string) string {
result := ""
count := 0
for _, c := range s {
if c == '(' {
if count > 0 {
result += string(c)
}
count++
} else if c == ')' {
count--
if count > 0 {
result += string(c)
}
}
}
return result
}
执行结果: 通过 显示详情 查看示例代码 添加备注
执行用时: 4 ms , 在所有 Go 提交中击败了 48.00% 的用户 内存消耗: 7.3 MB , 在所有 Go 提交中击败了 10.00% 的用户 通过测试用例: 59 / 59 炫耀一下:
本文由mdnice多平台发布