I am trying to create a program that takes a string as an argument into its constructor. I need a method that checks whether the string is a balanced parenthesized expression. It needs to handle ( { [ ] } ) each open needs to balance with its corresponding closing bracket. For example a user could input [({})] which would be balanced and }{ would be unbalanced. This doesn't need to handle letters or numbers. I need to use a stack to do this.
I was given this pseudocode but can not figure how to implement it in java. Any advice would be awesome.
Update- sorry forgot to post what i had so far. Its all messed up because at first i was trying to use char and then i tried an array.. im not exactly sure where to go.
import java.util.*;
public class Expression
{
Scanner in = new Scanner(System.in);
Stack<Integer> stack = new Stack<Integer>();
public boolean check()
{
System.out.println("Please enter your expression.");
String newExp = in.next();
String[] exp = new String[newExp];
for (int i = 0; i < size; i++)
{
char ch = exp.charAt(i);
if (ch == '(' || ch == '[' || ch == '{')
stack.push(i);
else if (ch == ')'|| ch == ']' || ch == '}')
{
//nothing to match with
if(stack.isEmpty())
{
return false;
}
else if(stack.pop() != ch)
{
return false;
}
}
}
if (stack.isEmpty())
{
return true;
}
else
{
return false;
}
}
}
How about this one, it uses both concept of stack plus counter checks:
Do you mind, if I will add my freaky-style solution based on JavaScript?
It's an ad-hoc stuff, not for production, but for the interviews or something like that. Or just for fun.
The code:
Checks:
Explanation:
It will recursively remove closes pairs "()", "[]" and "{}":
If at the end string's length will be empty - it's
true
, if not - it'sfalse
.P.S. Few answers
Because it's slow, and don't care about the possibility of some other characters between pairs.
Because I'm a frontend developer but met the same task, so perhaps it can be useful for somebody. And JS is also JVM lang =)
Because all JS developers are crazy, that's why.
This is my own implementation. I tried to make it the shortest an clearest way possible:
Simplifying and making readable. Using One Map only and minimum conditions to get desired result.