LeetCode-in-Java

1249. Minimum Remove to Make Valid Parentheses

Medium

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:

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.

Constraints:

Solution

public class Solution {
    public String minRemoveToMakeValid(String s) {
        int closingParantheis = 0;
        for (char ch : s.toCharArray()) {
            if (ch == ')') {
                closingParantheis++;
            }
        }
        StringBuilder result = new StringBuilder();
        int openingParanthesis = 0;
        for (char ch : s.toCharArray()) {
            if (ch == ')' && openingParanthesis == 0) {
                closingParantheis--;
            } else {
                if (ch == ')') {
                    openingParanthesis--;
                }
                if (ch == '(' && closingParantheis == 0) {
                    continue;
                }
                if (ch == '(') {
                    openingParanthesis++;
                    closingParantheis--;
                }
                result.append(ch);
            }
        }
        return result.toString();
    }
}