← All solutions
October 6Medium

Minimum add to make parentheses valid

  • String
  • Stack
  • Greedy
  • Bracket Sequences

Problem

A parentheses string is valid if and only if: - It is the empty string, - 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.

You are given a parentheses string s. In one move, you can insert a parenthesis at any position of the string.

• For example, if s = "()))", you can insert an opening parenthesis to be "(()))" or a closing parenthesis to be "())))".

Return the minimum number of moves required to make s valid.

Solution

class Solution:
    def minAddToMakeValid(self, s: str) -> int:
        opened = 0
        ans = 0
        for char in s:
            if char == "(":
                opened += 1
            else:
                if opened:
                    opened -=1 
                else:
                    ans += 1
        return ans + opened