# Print Bracket Number

Given an expression exp of length n consisting of some brackets. The task is to print the bracket numbers when the expression is being parsed.

Examples :

```Input : (a+(b*c))+(d/e)
Output : 1 2 2 1 3 3
The highlighted brackets in the given expression
(a+(b*c))+(d/e) has been assigned the numbers as:
1 2 2 1 3 3.

Input : ((())(()))
Output : 1 2 3 3 2 4 5 5 4 1
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach :

1. Define a variable left_bnum = 1.
2. Create a stack right_bnum.
3. Now, for i = 0 to n-1.
1. If exp[i] == ‘(‘, then print left_bnum, push left_bnum on to the stack right_bnum and finally increment left_bnum by 1.
2. Else if exp[i] == ‘)’, then print the top element of the stack right_bnum and then pop the top element from the stack.

## C++

 `// C++ implementation to print the bracket number ` `#include ` ` `  `using` `namespace` `std; ` ` `  `// function to print the bracket number ` `void` `printBracketNumber(string ``exp``, ``int` `n) ` `{ ` `    ``// used to print the bracket number ` `    ``// for the left bracket ` `    ``int` `left_bnum = 1; ` `     `  `    ``// used to obtain the bracket number  ` `    ``// for the right bracket ` `    ``stack<``int``> right_bnum; ` `     `  `    ``// traverse the given expression 'exp' ` `    ``for` `(``int` `i = 0; i < n; i++) { ` `         `  `        ``// if current character is a left bracket ` `        ``if` `(``exp``[i] == ``'('``) { ` `            ``// print 'left_bnum', ` `            ``cout << left_bnum << ``" "``; ` `             `  `            ``// push 'left_bum' on to the stack 'right_bnum' ` `            ``right_bnum.push(left_bnum); ` `             `  `            ``// increment 'left_bnum' by 1 ` `            ``left_bnum++; ` `        ``} ` `         `  `        ``// else if current character is a right bracket ` `        ``else` `if``(``exp``[i] == ``')'``) { ` ` `  `            ``// print the top element of stack 'right_bnum' ` `            ``// it will be the right bracket number ` `            ``cout << right_bnum.top() << ``" "``; ` `             `  `            ``// pop the top element from the stack ` `            ``right_bnum.pop(); ` `        ``} ` `    ``} ` `} ` ` `  `// Driver program to test above ` `int` `main() ` `{ ` `    ``string ``exp` `= ``"(a+(b*c))+(d/e)"``; ` `    ``int` `n = ``exp``.size(); ` `     `  `    ``printBracketNumber(``exp``, n); ` `     `  `    ``return` `0; ` `} `

## Java

 `// Java implementation to  ` `// print the bracket number ` `import` `java.io.*; ` `import` `java.util.*; ` ` `  `class` `GFG ` `{ ` `    ``// function to print  ` `    ``// the bracket number ` `    ``static` `void` `printBracketNumber(String exp,  ` `                                   ``int` `n) ` `    ``{ ` `        ``// used to print the  ` `        ``// bracket number for  ` `        ``// the left bracket ` `        ``int` `left_bnum = ``1``; ` `         `  `        ``// used to obtain the  ` `        ``// bracket number for ` `        ``// the right bracket ` `        ``Stack right_bnum = ` `                   ``new` `Stack(); ` `         `  `        ``// traverse the given ` `        ``// expression 'exp' ` `        ``for` `(``int` `i = ``0``; i < n; i++)  ` `        ``{ ` `             `  `            ``// if current character  ` `            ``// is a left bracket ` `            ``if` `(exp.charAt(i) == ``'('``)  ` `            ``{ ` `                 `  `                ``// print 'left_bnum', ` `                ``System.out.print( ` `                       ``left_bnum + ``" "``); ` `                 `  `                ``// push 'left_bum' on to ` `                ``// the stack 'right_bnum' ` `                ``right_bnum.push(left_bnum); ` `                 `  `                ``// increment 'left_bnum' by 1 ` `                ``left_bnum++; ` `            ``} ` `             `  `            ``// else if current character  ` `            ``// is a right bracket ` `            ``else` `if``(exp.charAt(i) == ``')'``) ` `            ``{ ` `     `  `                ``// print the top element  ` `                ``// of stack 'right_bnum' ` `                ``// it will be the right  ` `                ``// bracket number ` `                ``System.out.print( ` `                       ``right_bnum.peek() + ``" "``); ` `                 `  `                ``// pop the top element  ` `                ``// from the stack ` `                ``right_bnum.pop(); ` `            ``} ` `        ``} ` `    ``} ` `     `  `    ``// Driver Code ` `    ``public` `static` `void` `main(String args[]) ` `    ``{ ` `        ``String exp = ``"(a+(b*c))+(d/e)"``; ` `        ``int` `n = exp.length(); ` `         `  `        ``printBracketNumber(exp, n); ` `    ``} ` `} ` ` `  `// This code is contributed  ` `// by Manish Shaw(manishshaw1) `

## Python3

 `# Python3 implementation to print the bracket number ` ` `  `# function to print the bracket number ` `def` `printBracketNumber(exp, n): ` ` `  `    ``# used to print the bracket number ` `    ``# for the left bracket ` `    ``left_bnum ``=` `1` ` `  `    ``# used to obtain the bracket number ` `    ``# for the right bracket ` `    ``right_bnum ``=` `list``() ` ` `  `    ``# traverse the given expression 'exp' ` `    ``for` `i ``in` `range``(n): ` ` `  `        ``# if current character is a left bracket ` `        ``if` `exp[i] ``=``=` `'('``: ` ` `  `            ``# print 'left_bnum', ` `            ``print``(left_bnum, end ``=` `" "``) ` ` `  `            ``# push 'left_bum' on to the stack 'right_bnum' ` `            ``right_bnum.append(left_bnum) ` ` `  `            ``# increment 'left_bnum' by 1 ` `            ``left_bnum ``+``=` `1` ` `  `        ``# else if current character is a right bracket ` `        ``elif` `exp[i] ``=``=` `')'``: ` ` `  `            ``# print the top element of stack 'right_bnum' ` `            ``# it will be the right bracket number ` `            ``print``(right_bnum[``-``1``], end ``=` `" "``) ` ` `  `            ``# pop the top element from the stack ` `            ``right_bnum.pop() ` ` `  `# Driver Code ` `if` `__name__ ``=``=` `"__main__"``: ` `    ``exp ``=` `"(a+(b*c))+(d/e)"` `    ``n ``=` `len``(exp) ` ` `  `    ``printBracketNumber(exp, n) ` ` `  `# This code is contributed by ` `# sanjeev2552 `

## C#

 `// C# implementation to  ` `// print the bracket number ` `using` `System; ` `using` `System.Collections.Generic; ` ` `  `class` `GFG ` `{ ` `    ``// function to print  ` `    ``// the bracket number ` `    ``static` `void` `printBracketNumber(``string` `exp,  ` `                                   ``int` `n) ` `    ``{ ` `        ``// used to print the bracket  ` `        ``// number for the left bracket ` `        ``int` `left_bnum = 1; ` `         `  `        ``// used to obtain the bracket   ` `        ``// number for the right bracket ` `        ``Stack<``int``> right_bnum = ``new` `Stack<``int``>(); ` `         `  `        ``// traverse the given ` `        ``// expression 'exp' ` `        ``for` `(``int` `i = 0; i < n; i++)  ` `        ``{ ` `             `  `            ``// if current character  ` `            ``// is a left bracket ` `            ``if` `(exp[i] == ``'('``)  ` `            ``{ ` `                 `  `                ``// print 'left_bnum', ` `                ``Console.Write(left_bnum + ``" "``); ` `                 `  `                ``// Push 'left_bum' on to ` `                ``// the stack 'right_bnum' ` `                ``right_bnum.Push(left_bnum); ` `                 `  `                ``// increment 'left_bnum' by 1 ` `                ``left_bnum++; ` `            ``} ` `             `  `            ``// else if current character  ` `            ``// is a right bracket ` `            ``else` `if``(exp[i] == ``')'``) ` `            ``{ ` `     `  `                ``// print the top element  ` `                ``// of stack 'right_bnum' ` `                ``// it will be the right  ` `                ``// bracket number ` `                ``Console.Write(right_bnum.Peek() + ``" "``); ` `                 `  `                ``// Pop the top element  ` `                ``// from the stack ` `                ``right_bnum.Pop(); ` `            ``} ` `        ``} ` `    ``} ` `     `  `    ``// Driver Code ` `    ``static` `void` `Main() ` `    ``{ ` `        ``string` `exp = ``"(a+(b*c))+(d/e)"``; ` `        ``int` `n = exp.Length; ` `         `  `        ``printBracketNumber(exp, n); ` `    ``} ` `} ` ` `  `// This code is contributed  ` `// by Manish Shaw(manishshaw1) `

## PHP

 ` `

Output:

```1 2 2 1 3 3
```

Time Complexity : O(n).
Auxiliary Space : O(n).

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

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.