C++ Program To Check For Balanced Brackets In An Expression (Well-Formedness) Using Stack
Given an expression string exp, write a program to examine whether the pairs and the orders of “{“, “}”, “(“, “)”, “[“, “]” are correct in exp.
Example:
Input: exp = “[()]{}{[()()]()}”
Output: Balanced
Input: exp = “[(])”
Output: Not Balanced
Algorithm:
- Declare a character stack S.
- Now traverse the expression string exp.
- If the current character is a starting bracket (‘(‘ or ‘{‘ or ‘[‘) then push it to stack.
- If the current character is a closing bracket (‘)’ or ‘}’ or ‘]’) then pop from stack and if the popped character is the matching starting bracket then fine else brackets are not balanced.
- After complete traversal, if there is some starting bracket left in stack then “not balanced”
Below image is a dry run of the above approach:
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool areBracketsBalanced(string expr)
{
stack< char > s;
char x;
for ( int i = 0; i < expr.length(); i++)
{
if (expr[i] == '(' || expr[i] == '['
|| expr[i] == '{' )
{
s.push(expr[i]);
continue ;
}
if (s.empty())
return false ;
switch (expr[i]) {
case ')' :
x = s.top();
s.pop();
if (x == '{' || x == '[' )
return false ;
break ;
case '}' :
x = s.top();
s.pop();
if (x == '(' || x == '[' )
return false ;
break ;
case ']' :
x = s.top();
s.pop();
if (x == '(' || x == '{' )
return false ;
break ;
}
}
return (s.empty());
}
int main()
{
string expr = "{()}[]" ;
if (areBracketsBalanced(expr))
cout << "Balanced" ;
else
cout << "Not Balanced" ;
return 0;
}
|
Time Complexity: O(n)
Auxiliary Space: O(n) for stack.
Please refer complete article on Check for Balanced Brackets in an expression (well-formedness) using Stack for more details!
Last Updated :
17 Aug, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...