代码
public class BracketPairValidate {
private static Map<Character,Character> map;
private static Set<Character> left;
static{
map = new HashMap<>(3);
map.put(')','(');
map.put(']','[');
map.put('}','{');
left = new HashSet<>(3);
left.add('(');
left.add('[');
left.add('{');
}
public boolean isValid(String s){
Deque<Character> deque = new ArrayDeque<>();
for (int i = 0; i < s.toCharArray().length; i++) {
char ch = s.charAt(i);
if (left.contains(ch)){//如果是左括号则入栈
deque.push(ch);
}else if(map.containsKey(ch)){//如果是右括号则进入判断
if (deque.isEmpty() || !deque.peek().equals(map.get(ch))){//判断栈顶元素是否是对应的左括号
return false;
}
//取出栈顶元素
deque.pop();
}
}
return deque.isEmpty();
}
public static void main(String[] args) {
BracketPairValidate validate = new BracketPairValidate();
System.out.println(validate.isValid("(校验){[]}}"));
}
}
原理:
利用栈结构,如果遇到左括号:’(‘、’[‘、’{‘。则将符号入栈。遇到右括号:’)’、’]’、’}’。则判断栈顶的元素是否是对应的左括号。所以用了一个map,key为右括号,value为左括号。