【Stack】表达式合法判断

来源:互联网 发布:大酒神淘宝店地址 编辑:程序博客网 时间:2024/05/17 02:25

  • 题目概要
  • 分析
  • AC 代码

题目概要

题目描述
写一段代码,判断一个包括’{‘,’[‘,’(‘,’)’,’]’,’}’的表达式是否合法(注意看样例的合法规则。)
给定一个表达式A,请返回一个bool值,代表它是否合法。

测试样例:
“[a+b*(5-4)]{x+b+b(({1+2)}}”

返回:true

分析

本题核心就是让左括号(不管大中小)的数量等于右括号(不管大中小)的数量就行。

AC 代码

方法一:

import java.util.Stack;public class ChkExpression {    public boolean chkLegal(String A){        Stack<Character> stack = new Stack<>();        for(int i=0; i< A.length(); ++i){            char c = A.charAt(i);            if( c =='[' || c== '(' || c=='{')                stack.push(c);            else if( c == ']' || c == ')' || c == '}')                stack.pop();        }        return stack.isEmpty();    }}

方法2:

import java.util.Stack;public class ChkExpression {    public boolean chkLegal(String A) {        Stack<Character> stack1 = new Stack<>();// [ ]        Stack<Character> stack2 = new Stack<>();// ( )        Stack<Character> stack3 = new Stack<>();// { }        for(int i=0; i< A.length(); i++){            char c = A.charAt(i);            switch(c){                case '[':                    stack1.push(c);                    break;                case '(':                    stack2.push(c);                    break;                case '{':                    stack3.push(c);                    break;                case ']':                    stack1.pop();                    break;                case ')':                    stack2.pop();                    break;                case '}':                    stack3.pop();                    break;            }           }        return stack1.empty() && stack2.empty() && stack3.empty();    }}