您的位置:首页 > 编程语言

2016去哪儿编程题:表达式合法判断

2016-03-30 22:11 447 查看

题目描述

写一段代码,判断一个包括'{','[','(',')',']','}'的表达式是否合法(注意看样例的合法规则。)给定一个表达式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();
}
}
上面注释去除测试不过这个题目好奇怪,竟然不需要考虑括号内是否有数字的情况,所有开始我考虑情况比较多,就不知道怎么做了,讨论中就是按照上面写的

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: