zoukankan      html  css  js  c++  java
  • LeetCode 1249. Minimum Remove to Make Valid Parentheses

    原题链接在这里: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.

  • 相关阅读:
    教你修改Linux下高并发socket最大连接数所受的各种限制
    nginx浏览pdf
    Spring3 M2 quartz-2.1.7 解决bean不能注入问题
    DCSync
    Linux下python2.7安装pip
    ._cache_问题
    php-mvc概念
    php第十天-面向对象命名空间
    php第九天-session/cookice会话控制
    fastadmin V1.0.0.20200506_beta 漏洞复现
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/11980982.html
Copyright © 2011-2022 走看看