# Convert an unbalanced bracket sequence to a balanced sequence

• Difficulty Level : Hard
• Last Updated : 13 May, 2021

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

 `// C++ implementation of the approach``#include ``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);``}`

## Java

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

## Python3

 `# 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`

## C#

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

## Javascript

 ``

Output

`((()))()`

Time Complexity: O(N)
Auxiliary Space: O(N)

My Personal Notes arrow_drop_up