算法思想:
做一个空栈,读入字符。
若字符是左运算符,则入栈
若字符时右运算符,当栈为空时报错
否则,将栈顶元素弹出,若不匹配,则报错
最后,字符读完后,栈非空,则报错
代码:
Stack类
package cn.edu.tju.stack;
public class Stack {
public static void push(char[] arr, int topOfStack, char x){
arr[topOfStack] = x;
}
public static char pop(char[] arr, int topOfStack){
char x = arr[topOfStack];
return x;
}
}
客户端Client类
package cn.edu.tju.stack;
public class Client {
public static void main(String[] args){
char[] input = {'[', '(', ')', ']', '{', '(', '}', ')'};
char[] stack = new char[input.length];
int topOfStack = -1;
boolean result = true;
for(int i = 0; i < input.length; i ++){
switch(input[i]){
case '[':
case '{':
case '(':
Stack.push(stack, ++topOfStack, input[i]);
break;
default:
if(topOfStack == -1){
result = false;
break;
}else{
char top = Stack.pop(stack, topOfStack--);
//if(input[i] != top){
if((input[i] == ')' && top != '(') || (input[i] == ']' && top != '[') || (input[i] == '}' && top != '{')){
result = false;
}
break;
}
}
}
if(topOfStack > -1){
System.out.println("false");
}else if(result){
System.out.println("true");
}else if(!result){
System.out.println("false");
}
}
}