1249. Minimum Remove to Make Valid Parentheses

Description

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.

Constraints

  • 1 <= s.length <= 10^5

  • s[i] is one of '(' , ')' and lowercase English letters.

Approach

  • GeeksforGeeks

  • ProgramCreek

  • YouTube

Examples

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.

Solutions

/**
 * Time complexity : O(N)
 * Space complexity : O(N)
 */

class Solution {
    public String minRemoveToMakeValid(String s) {
        if(s == null || s.length() == 0) {
            return s;
        }
        int openCount = 0, closeCount = 0;
        for(int i = 0; i < s.length(); i++) {
            if(s.charAt(i) == ')') {
                closeCount++;
            }
        }
        StringBuilder sb = new StringBuilder();
        for(char ch: s.toCharArray()) {
            if(ch == '(') {
                if(openCount == closeCount) {
                    continue;
                }
                openCount++;
            } else if(ch == ')') {
                closeCount--;
                if(openCount == 0) {
                    continue;
                }
                openCount--;
            }
            sb.append(ch);
        }
        return sb.toString();
    }
}

Follow up

Last updated

Was this helpful?