Program to find minimum remove required to make valid parentheses in Python

PythonServer Side ProgrammingProgramming

Suppose we have a string s with parenthesis '(' , ')' and lowercase English characters. We have to delete the minimum number of parentheses ( '(' or ')', from any positions ) so that the resulting parentheses string is valid and have to finally return any valid string. Here the parentheses string is valid when all of these criteria are fulfilled −

  • The string is empty and contains lowercase characters only, or

  • The string can be written as AB (A concatenated with B), where A and B are valid strings, or

  • The string can be written as the form of (A), where A is a valid string.

So, if the input is like s = "m)n(o)p", then the output will be "mn(o)p"

To solve this, we will follow these steps −

  • stack := a new list

  • indexes := a new set

  • i := 0

  • for each c in s, do

    • if c is same as '(', then

      • push i into stack

    • otherwise when c is same as ')', then

      • if size of stack is same as 0, then

        • insert i into indexes

      • otherwise,

        • pop from stack

      • i := i + 1

  • ret := blank string

  • indexes := store all elements into indexes

  • for i in range 0 to size of s - 1, do

    • if i not in indexes, then

      • ret := ret + s[i]

  • return ret

Example

Let us see the following implementation to get better understanding −

def solve(s):
   stack = []
   indexes = set()
   i = 0

   for c in s:
      if c == '(':
         stack.append(i)
      elif c == ')':
         if len(stack) == 0:
            indexes.add(i)
         else:
            stack.pop()
      i += 1

   ret = ''
   indexes = indexes.union(stack)
   for i in range(len(s)):
      if i not in indexes:
         ret += s[i]

   return ret

s = "m)n(o)p"
print(solve(s))

Input

"m)n(o)p"

Output

mn(o)p
raja
Updated on 07-Oct-2021 12:34:13

Advertisements