码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] 1249. Minimum Remove to Make Valid Parentheses

时间:2020-05-08 13:23:52      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:需要   stringbu   没有   array   例子   tput   accept   ini   时间   

移除无效的括号。题意是给一个带有左括号和右括号的字符串,请你移除一些括号,使得剩下的部分成为一个有效的字符串。例子,

Example 1:

Input: s = "lee(t(c)o)de)"
Output: "lee(t(c)o)de"
Explanation: "lee(t(co)de)" , "lee(t(c)ode)" would also be accepted.

Example 2:

Input: s = "a)b(c)d"
Output: "ab(c)d"

Example 3:

Input: s = "))(("
Output: ""
Explanation: An empty string is also valid.

Example 4:

Input: s = "(a(b(c)d)"
Output: "a(b(c)d)"

思路是stack但是这个题跟20题valid parenthesis还不太一样,因为不光是判断,而是最后需要返回一个有效的结果。这个题我没有用到stack但是用到了stack的思想,用一个open变量判断到底是左括号多还是右括号多,如果open小于0(右括号多)就一定不要再放右括号了。第一次扫描input,从左往右;第二次从右往左,但是因为第一次扫描的时候只是控制不能让右括号多于左括号,所以在第二次从右往左扫描的时候需要判断如果左括号多了,就不要再加入结果集了。

时间O(n)

空间O(n)

Java实现

 1 class Solution {
 2     public String minRemoveToMakeValid(String s) {
 3         StringBuilder sb = new StringBuilder();
 4         int open = 0;
 5         for (char c : s.toCharArray()) {
 6             if (c == ‘(‘) {
 7                 open++;
 8             } else if (c == ‘)‘) {
 9                 if (open == 0) {
10                     continue;
11                 }
12                 open--;
13             }
14             sb.append(c);
15         }
16 
17         StringBuilder res = new StringBuilder();
18         for (int i = sb.length() - 1; i >= 0; i--) {
19             if (sb.charAt(i) == ‘(‘ && open-- > 0) {
20                 continue;
21             }
22             res.append(sb.charAt(i));
23         }
24         return res.reverse().toString();
25     }
26 }

 

[LeetCode] 1249. Minimum Remove to Make Valid Parentheses

标签:需要   stringbu   没有   array   例子   tput   accept   ini   时间   

原文地址:https://www.cnblogs.com/aaronliu1991/p/12849741.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!