Java Stack实现括号匹配
思路
- 用一个栈暂存左括号
- 顺序读取表达式
- 遇到左括号,入栈
- 遇到右括号,从栈中弹出一个左括号,如果栈中没有左括号,或者有左括号但左右括号不匹配,则整个表达式括号不匹配
- 如果表达式中所有的右括号都和对应的左括号匹配,且栈中没有多余的左括号,说明整个表达式括号匹配
代码
public static boolean doesMatch() {
Stack<String> a = new Stack<>();
Scanner s = new Scanner(System.in);
while(s.hasNext()) {
String str = s.next();
if(str.equals("(") || str.equals("[") || str.equals("{")) {
a.push(str);
}else if(str.equals(")")) {
if(a.isEmpty()) return false;
else if(!a.pop().equals("(")) return false;
}else if(str.equals("]")) {
if(a.isEmpty()) return false;
else if(!a.pop().equals("[")) return false;
}else if(str.equals("}")) {
if(a.isEmpty()) return false;
else if(!a.pop().equals("{")) return false;
}
}
if(!a.isEmpty()) return false;
return true;
}