算法思想:
做一个空栈,读入字符。
若字符是左运算符,则入栈
若字符时右运算符,当栈为空时报错
否则,将栈顶元素弹出,若不匹配,则报错
最后,字符读完后,栈非空,则报错
代码:
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");
- }
- }
- }