LeetCode 1249. Minimum Remove to Make Valid Parentheses

怎甘沉沦 提交于 2020-11-25 05:53:25

原题链接在这里:https://leetcode.com/problems/minimum-remove-to-make-valid-parentheses/

题目:

Given a string s of '(' , ')' and lowercase English characters. 

Your task is to remove the minimum number of parentheses ( '(' or ')', in any positions ) so that the resulting parentheses string is valid and return any valid string.

Formally, a parentheses string is valid if and only if:

  • It is the empty string, contains only lowercase characters, or
  • It can be written as AB (A concatenated with B), where A and B are valid strings, or
  • It can be written as (A), where A is a valid string.

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)"

Constraints:

  • 1 <= s.length <= 10^5
  • s[i] is one of  '(' , ')' and lowercase English letters.

题解:

From left to right, accoulate left open parenthese. 

When encountering ")" and there is no more left "(", then this should be ignored.

Do the same thing from right left.

Time Complexity: O(n). n = s.length().

Space: O(n).

AC Java:

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

类似Remove Invalid ParenthesesMinimum Add to Make Parentheses Valid.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!