Convert an unbalanced bracket sequence to a balanced sequence

Given an unbalanced bracket sequence of ‘(‘ and ‘)’, convert it into a balanced sequence by adding the minimum number of ‘(‘ at the beginning of the string and ‘)’ at the end of the string.

Examples:

Input: str = “)))()”
Output: “((()))()”



Input: str = “())())(())())”
Output: “(((())())(())())”

Approach:

  • Let us assume that whenever we encounter with opening bracket the depth increases by one and with a closing bracket the depth decreases by one.
  • Find the maximum negative depth in minDep and add that number of ‘(‘ at the beginning.
  • Then loop the new sequence to find the number of ‘)’s needed at the end of the string and add them.
  • Finally, return the string.

Below is the implementation of the approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to return balancedBrackets string
string balancedBrackets(string str)
{
    // Initializing dep to 0
    int dep = 0;
  
    // Stores maximum negative depth
    int minDep = 0;
  
    for (int i = 0; i < str.length(); i++) {
        if (str[i] == '(')
            dep++;
        else
            dep--;
  
        // if dep is less than minDep
        if (minDep > dep)
            minDep = dep;
    }
  
    // if minDep is less than 0 then there
    // is need to add '(' at the front
    if (minDep < 0) {
        for (int i = 0; i < abs(minDep); i++)
            str = '(' + str;
    }
  
    // Reinitializing to check the updated string
    dep = 0;
  
    for (int i = 0; i < str.length(); i++) {
        if (str[i] == '(')
            dep++;
        else
            dep--;
    }
  
    // if dep is not 0 then there
    // is need to add ')' at the back
    if (dep != 0) {
        for (int i = 0; i < dep; i++)
            str = str + ')';
    }
    return str;
}
  
// Driver code
int main()
{
    string str = ")))()";
    cout << balancedBrackets(str);
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach
import java.util.*;
  
class GFG
{
          
// Function to return balancedBrackets string
static String balancedBrackets(String str)
{
    // Initializing dep to 0
    int dep = 0;
  
    // Stores maximum negative depth
    int minDep = 0;
  
    for (int i = 0; i < str.length(); i++)
    {
        if (str.charAt(i) == '(')
            dep++;
        else
            dep--;
  
        // if dep is less than minDep
        if (minDep > dep)
            minDep = dep;
    }
  
    // if minDep is less than 0 then there
    // is need to add '(' at the front
    if (minDep < 0)
    {
        for (int i = 0; i < Math.abs(minDep); i++)
            str = '(' + str;
    }
  
    // Reinitializing to check the updated string
    dep = 0;
  
    for (int i = 0; i < str.length(); i++) 
    {
        if (str.charAt(i) == '(')
            dep++;
        else
            dep--;
    }
  
    // if dep is not 0 then there
    // is need to add ')' at the back
    if (dep != 0)
    {
        for (int i = 0; i < dep; i++)
            str = str + ')';
    }
    return str;
}
  
// Driver code
public static void main (String[] args) 
{
    String str = ")))()";
    System.out.println(balancedBrackets(str));
}
}
  
// This code is contributed by ihritik

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach
  
# Function to return balancedBrackets String
def balancedBrackets(Str):
      
    # Initializing dep to 0
    dep = 0
  
    # Stores maximum negative depth
    minDep = 0
  
    for i in Str:
        if (i == '('):
            dep += 1
        else:
            dep -= 1
  
        # if dep is less than minDep
        if (minDep > dep):
            minDep = dep
  
    # if minDep is less than 0 then there
    # is need to add '(' at the front
    if (minDep < 0):
        for i in range(abs(minDep)):
            Str = '(' + Str
  
    # Reinitializing to check the updated String
    dep = 0
  
    for i in Str:
        if (i == '('):
            dep += 1
        else:
            dep -= 1
  
    # if dep is not 0 then there
    # is need to add ')' at the back
    if (dep != 0):
        for i in range(dep):
            Str = Str + ')'
  
    return Str
  
# Driver code
Str = ")))()"
print(balancedBrackets(Str))
  
# This code is contributed by Mohit Kumar

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of the approach
using System;
  
class GFG
{
          
    // Function to return balancedBrackets string
    static string balancedBrackets(string str)
    {
        // Initializing dep to 0
        int dep = 0;
      
        // Stores maximum negative depth
        int minDep = 0;
      
        for (int i = 0; i < str.Length; i++) 
        {
            if (str[i] == '(')
                dep++;
            else
                dep--;
      
            // if dep is less than minDep
            if (minDep > dep)
                minDep = dep;
        }
      
        // if minDep is less than 0 then there
        // is need to add '(' at the front
        if (minDep < 0) 
        {
            for (int i = 0; i < Math.Abs(minDep); i++)
                str = '(' + str;
        }
      
        // Reinitializing to check the updated string
        dep = 0;
      
        for (int i = 0; i < str.Length; i++)
        {
            if (str[i] == '(')
                dep++;
            else
                dep--;
        }
      
        // if dep is not 0 then there
        // is need to add ')' at the back
        if (dep != 0) 
        {
            for (int i = 0; i < dep; i++)
                str = str + ')';
        }
        return str;
    }
      
    // Driver code
    public static void Main () 
    {
        String str = ")))()";
        Console.WriteLine(balancedBrackets(str));
    }
}
  
// This code is contributed by ihritik

chevron_right


Output:

((()))()


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.