Skip to content
Related Articles

Related Articles

Save Article
Improve Article
Save Article
Like Article

Insert minimum parantheses to make string balanced

  • Last Updated : 28 Apr, 2020

Given a string of digits S. The task is to insert a minimum number of opening and closing parentheses into the string S such that the resulting string is balanced and each digit d must be inside d pairs of matching parentheses.


Input: S = 221
Output: ((22)1)
The string ((2))((2))(1) is not valid solutions because it is not of minimum length.

Input: S = 3102
Output: (((3))1)0((2))


  1. First, we will insert the required opening parentheses for the first element and store its value in p.
  2. Then we iterate over the string from 1 to length of string and
    • Subtract current element from the previous element (int(S[i-1]) – int(S[i])) and store its value in a variable w.
    • If w >= 0 then insert w closing parentheses and update p to (p – w). Otherwise,
    • Insert current value minus p (int(S[i]) – p) opening parentheses and update p to equals to the current value.
    • At the end of the loop, we balance parentheses by inserting the required closing parentheses.

Below is the implementation of the above approach:

# Python 3 implementation to balance 
# the string
# Function to insert matching parantheses
def ParanthesesNesting(S):
    # To check first element if 0 or not
    if S[0]=='0':
        out ='0'
        p = 0
        out ='('*(int(S[0])) + S[0]
        p = int(S[0])
    # Loop from 1 to length of input_string
    for i in range(1, (len(S))):
        w = int(S[i - 1]) - int(S[i])
        # To check w is greater than or 
        # equal to zero or not
        if(w >= 0):
            out = out + ')' * int(w) + S[i]
            p = p - w
            out = out + '(' * (int(S[i]) - p) + S[i]
            p = int(S[i])
    y = out.count('(') - out.count(')')
    out += ')' * int(y)
# Driver code 
if __name__ == '__main__'
    string ='221'

My Personal Notes arrow_drop_up
Recommended Articles
Page :