去除字符串中的无效括号
题目
(1)给你一个由 ‘(’、’)’ 和小写字母组成的字符串 s。
(2)你需要从字符串中删除最少数目的 ‘(’ 或者 ‘)’ (可以删除任意位置的括号),使得剩下的「括号字符串」有效。请返回任意一个合法字符串。
(3)有效「括号字符串」应当符合以下 任意一条 要求:
- 空字符串或只包含小写字母的字符串。
- 可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」。
- 可以被写作 (A) 的字符串,其中 A 是一个有效的「括号字符串」。
(4)示例如下
输入:s = “lee(t©o)de)”
输出:“lee(t©o)de”
解释:“lee(t(co)de)” , “lee(t©ode)” 也是一个可行答案。
解决思路
- 思路1:用栈结构解决,当遇到左括号时入栈,当遇到右括号时出栈。在栈结构中能被抵消的括号都是有效的括号,不能被抵消的括号都是无效的括号。
- 思路2:用左右括号差解决,第一遍从左到右遍历字符串,去掉多余的右括号。第二遍遍历,在第一次遍历的结果上从右到左遍历,去掉多余的左括号。然后返回两遍遍历后的结果。
代码
说明
- 对应LeetCode第1249题。
- 链接:https://leetcode-cn.com/problems/minimum-remove-to-make-valid-parentheses/