Program to find minimum insertions to balance a parentheses string using Python


Suppose we have a string s with opening and closing parenthesis '(' and ')'. We can say a parentheses string is balanced when −

  • Any left parenthesis '(' have a corresponding two consecutive right parenthesis '))'.

  • A Left parenthesis '(' must go before the corresponding two consecutive right parenthesis '))'.

So for example, "())", "())(())))" are balanced but ")()", "()))" are not. If we have such string, we have to count number of parenthesis (opening or closing) to make string balanced.

So, if the input is like s = "(())))))", then the output will be 1 because if we split it up, we can get "( ()) )) ))", so we need one left parenthesis to make the string "( ()) ()) ))" to make it balanced.

To solve this, we will follow these steps −

  • := 0, n := size of s

  • ret := 0, i := 0

  • while i < n, do

    • if s[i] is same as '(', then

  • := o + 1

    • otherwise,

      • if i + 1 < n and s[i + 1] is same as ')', then

        • if o is 0, then

          • ret := ret + 1

        • otherwise,

  • := o - 1

    • i := i + 1

    • otherwise,

      • ret := ret + 1

      • if o is 0, then

        • ret := ret + 1

      • otherwise,

  • := o - 1

    • i := i + 1

  • return ret + 2 * o

Let us see the following implementation to get better understanding −


Example

 Live Demo

def solve(s):
   o = 0
   n = len(s)
   ret = 0
   i = 0
   while i < n:
      if s[i] == '(':
         o += 1
      else:
         if i + 1 < n and s[i + 1] == ')':
            if not o:
               ret += 1
            else:
               o -= 1
               i += 1
         else:
            ret += 1
            if not o:
               ret += 1
            else:
               o -= 1
      i += 1
   return ret + 2 * o
s = "(())))))"
print(solve(s))

Input

"(())))))"

Output

3

Updated on: 29-May-2021

523 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements