假设一个算术表达式中包含圆括号()、方括号[]和花括号{}三类括号,要求判断表达式中括号是否正确匹配配对。
分析:括号匹配符号后到的括号要最先被匹配,所以满足栈“后进先出”的特点。
括号匹配共有四种情况:(1)左右括号配对次序不正确,即存在类似“(]”这种情况;(2)右括号多于左括号;(3)左括号多于右括号;(4)匹配正确。
综上:我们可以存储表达式的字符串并按顺序扫描,进行匹配。顺序栈和链式堆栈都可以;
下面看代码:(不再构造栈类,上篇有)
package StackAndQueue;
/**
* @author sun
* 创建时间:2017年3月30日下午2:52:31
*/
public class BraceMatch {
//遍历字符数组并利用进栈出栈匹配括号
static void expIsCorrect(String[] exp,int n)throws Exception{
SeqStack myStack = new SeqStack();
//LinStack myStack = new LinStack(); //也可以用链式堆栈
for(int i=0;i<n;i++){//如果是左括号就入栈
if((exp[i].equals(new String("(")))
|| (exp[i].equals(new String("[")))
|| (exp[i].equals(new String("{"))))
myStack.push(exp[i]);
//如果是右括号