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 

Source: Flipkart Interview Experience | Set 49.

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation to print the bracket number
#include <bits/stdc++.h>
  
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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<Integer> right_bnum =
                   new Stack<Integer>();
          
        // 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)

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP implementation to 
// print the bracket number
  
// function to print
// the bracket number
function 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 = array();
    $t = 0;
      
    // traverse the given
    // expression 'exp'
    for ($i = 0; $i < $n; $i++) 
    {
          
        // if current character 
        // is a left bracket
        if ($exp[$i] == '(')
        {
              
            // print 'left_bnum',
            echo $left_bnum . " ";
              
            // push 'left_bum' on to
            // the stack 'right_bnum'
            $right_bnum[$t++] = $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
            echo $right_bnum[$t - 1] . " ";
              
            // pop the top element
            // from the stack
            $right_bnum[$t - 1] = 1;
            $t--;
        }
    }
}
  
// Driver Code
$exp = "(a+(b*c))+(d/e)";
$n = strlen($exp);
  
printBracketNumber($exp, $n);
      
// This code is contributed 
// by mits
?>

chevron_right


Output:

1 2 2 1 3 3

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



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.



Improved By : manishshaw1, Mithun Kumar