题目描述

写一段代码,判断一个包括'{','[','(',')',']','}'的表达式是否合法(注意看样例的合法规则。)

给定一个表达式A,请返回一个bool值,代表它是否合法。

测试样例
"[a+b*(5-4)]*{x+b+b*({1+2)}}"
返回:true
测试样例
"[a+b*(5-4)]*{x+b+b*(({1+2)}}"
返回:false
解题
不考虑左右括号是否匹配,不考虑括号内是否由数字,如:2—1+()+{3]*{5) 这样也可以
import java.util.*;

public class ChkExpression {
    public boolean chkLegal(String A) {
        // write code here
      
        Stack<Character> stack = new Stack<Character>();
        HashMap<Character,Character> map = new HashMap<Character,Character>();
        map.put('[',']');
        map.put('{','}');
        map.put('(',')');
        for(int i =0;i<A.length();i++){
            char ch = A.charAt(i);
            if(map.containsKey(ch)){
                stack.push(ch);
            }else if(map.containsValue(ch)){
                if(stack.isEmpty())
                    return false;
                char top = stack.peek();
               // if(map.get(top).equals(ch)){
                    stack.pop();
               // }else{
                //    return false;
                //}
            }
        }
        return stack.isEmpty();
    }
}

上面注释去除测试不过

这个题目好奇怪,竟然不需要考虑括号内是否有数字的情况,所有开始我考虑情况比较多,就不知道怎么做了,讨论中就是按照上面写的