# Minimum number of Parentheses to be added to make it valid

Given a string S of parentheses ‘(‘ or ‘)’ where, . The task is to find minimum number of parentheses ‘(‘ or ‘)’ (at any positions) we must add to make the resulting parentheses string is valid.

Examples:

Input: str = "())"
Output: 1
One '(' is required at beginning.

Input: str = "((("
Output: 3
Three ')' is required at end.


## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: We keep the track of balance of the string i:e the number of ‘(‘ minus the number of ‘)’. A string is valid if its balance is 0, and also every prefix has non-negative balance.

Now, consider the balance of every prefix of S. If it is ever negative (say, -1), we must add a ‘(‘ bracket at the beginning. Also, if the balance of S is positive (say, +P), we must add P times ‘)’ brackets at the end.

Below is the implementation of the above approach:

## C++

 // C++ Program to find minimum number of '(' or ')'  // must be added to make Parentheses string valid.  #include  using namespace std;     // Function to return required minimum number  int minParentheses(string p)  {         // maintain balance of string      int bal = 0;      int ans = 0;         for (int i = 0; i < p.length(); ++i) {             bal += p[i] == '(' ? 1 : -1;             // It is guaranteed bal >= -1          if (bal == -1) {              ans += 1;              bal += 1;          }      }         return bal + ans;  }     // Driver code  int main()  {         string p = "())";         // Function to print required answer      cout << minParentheses(p);         return 0;  }

## Java

 // Java Program to find minimum number of '(' or ')'   // must be added to make Parentheses string valid.      public class GFG {         // Function to return required minimum number       static int minParentheses(String p)       {                    // maintain balance of string           int bal = 0;           int ans = 0;                    for (int i = 0; i < p.length(); ++i) {                        bal += p.charAt(i) == '(' ? 1 : -1;                        // It is guaranteed bal >= -1               if (bal == -1) {                   ans += 1;                   bal += 1;               }           }                    return bal + ans;       }              public static void main(String args[])      {          String p = "())";                      // Function to print required answer           System.out.println(minParentheses(p));                }      // This code is contributed by ANKITRAI1  }

## Python3

 # Python3 Program to find   # minimum number of '(' or ')'   # must be added to make Parentheses   # string valid.      # Function to return required   # minimum number   def minParentheses(p):             # maintain balance of string       bal=0     ans=0     for i in range(0,len(p)):          if(p[i]=='('):              bal+=1         else:              bal+=-1                        # It is guaranteed bal >= -1          if(bal==-1):              ans+=1             bal+=1     return bal+ans     # Driver code  if __name__=='__main__':      p = "())"        # Function to print required answer       print(minParentheses(p))         # this code is contributed by   # sahilshelangia

## C#

 // C# Program to find minimum number   // of '(' or ')' must be added to   // make Parentheses string valid.   using System;     class GFG  {  // Function to return required   // minimum number   static int minParentheses(string p)   {          // maintain balance of string       int bal = 0;       int ans = 0;          for (int i = 0; i < p.Length; ++i)       {              bal += p[i] == '(' ? 1 : -1;              // It is guaranteed bal >= -1           if (bal == -1)           {               ans += 1;               bal += 1;           }       }          return bal + ans;   }      // Driver code   public static void Main()   {       string p = "())";          // Function to print required answer       Console.WriteLine(minParentheses(p));   }  }      // This code is contributed   // by Kirti_Mangal

## PHP

 = -1          if ($bal == -1)   {   $ans += 1;              $bal += 1;   }   }     return $bal + $ans;  }    // Driver code  $p = "())";     // Function to print required answer  echo minParentheses(\$p);     // This code is contributed by ita_c  ?>

Output:

1


Time Complexity: O(N), where N is the length of S.
Space Complexity: O(1).

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.