LeetCode in Kotlin

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

class Solution {
    fun minRemoveToMakeValid(s: String): String {
        var closingParantheis = 0
        for (ch in s.toCharArray()) {
            if (ch == ')') {
                closingParantheis++
            }
        }
        val result = StringBuilder()
        var openingParanthesis = 0
        for (ch in 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()
    }
}