Skip to content
Related Articles

Related Articles

Improve Article

Minimum number of Parentheses to be added to make it valid

  • Difficulty Level : Medium
  • Last Updated : 19 May, 2021

Given a string S of parentheses ‘(‘ or ‘)’ where, 0\leq len(S)\leq 1000  . 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++




// 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 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




<?php
// PHP Program to find minimum number of
// '(' or ')' must be added to make
// Parentheses string valid.
 
// Function to return required minimum number
function 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 answer
echo minParentheses($p);
 
// This code is contributed by ita_c
?>

Javascript




<script>
 
// Javascript Program to find minimum number of '(' or ')'
// must be added to make Parentheses string valid.
 
// Function to return required minimum number
function 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 answer
document.write( minParentheses(p));
 
// This code is contributed by SoumikMondal
 
</script>
Output: 
1

 

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

Attention reader! Don’t stop learning now. Participate in the Scholorship Test for First-Step-to-DSA Course for Class 9 to 12 students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :