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 :
- Define a variable left_bnum = 1.
- Create a stack right_bnum.
- Now, for i = 0 to n-1.
- If exp[i] == ‘(‘, then print left_bnum, push left_bnum on to the stack right_bnum and finally increment left_bnum by 1.
- Else if exp[i] == ‘)’, then print the top element of the stack right_bnum and then pop the top element from the stack.
Implementation:
C++
// 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_bnum' 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<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_bnum' 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_bnum' 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_bnum' 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
<?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_bnum' 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 ?> |
Javascript
<script> // Javascript 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 var left_bnum = 1; // used to obtain the bracket number // for the right bracket var right_bnum = []; // traverse the given expression 'exp' for ( var i = 0; i < n; i++) { // if current character is a left bracket if (exp[i] == '(' ) { // print 'left_bnum', document.write( left_bnum + " " ); // push 'left_bnum' 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 document.write( right_bnum[right_bnum.length-1] + " " ); // pop the top element from the stack right_bnum.pop(); } } } // Driver program to test above var exp = "(a+(b*c))+(d/e)" ; var n = exp.length; printBracketNumber(exp, n); </script> |
Output:
1 2 2 1 3 3
Time Complexity : O(n).
Auxiliary Space : O(n).
Please Login to comment...