代码
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为左括号。
