Minimum number of Parentheses to be added to make it valid

19 May, 2021
Given a string S of parentheses ‘(‘ or ‘)’ where, . The task is to find a 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.
 
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++
Java
Python3
C#
PHP
Javascript
// C++ Program to find minimum number of '(' or ')'// must be added to make Parentheses string valid.#include <bits/stdc++.h>using namespace std; // Function to return required minimum numberint 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 codeint main(){     string p = "())";     // Function to print required answer    cout << minParentheses(p);     return 0;}
// 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 Program to find# minimum number of '(' or ')'# must be added to make Parentheses# string valid. # Function to return required# minimum numberdef 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 codeif __name__=='__main__':    p = "())"     # Function to print required answer    print(minParentheses(p))     # this code is contributed by# sahilshelangia
// 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 numberstatic 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 codepublic static void Main(){    string p = "())";     // Function to print required answer    Console.WriteLine(minParentheses(p));}} // This code is contributed// by Kirti_Mangal
<?php// PHP Program to find minimum number of// '(' or ')' must be added to make// Parentheses string valid. // Function to return required minimum numberfunction minParentheses($p){     // maintain balance of string    $bal = 0;    $ans = 0;     for ($i = 0; $i < strlen($p); ++$i)    {        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$p = "())"; // Function to print required answerecho minParentheses($p); // This code is contributed by ita_c?>
<script> // Javascript Program to find minimum number of '(' or ')'// must be added to make Parentheses string valid. // Function to return required minimum numberfunction minParentheses( p){     // maintain balance of string    var bal = 0;    var ans = 0;     for (var 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;} var p = "())"; // Function to print required answerdocument.write( minParentheses(p)); // This code is contributed by SoumikMondal </script>
1
 
Time Complexity: O(N), where N is the length of S. Space Complexity: O(1). 
Kirti_Mangal
ankthon
sahilshelangia
ukasp
SoumikMondal
Parentheses-Problems
School Programming
Strings
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.