代码

    1. public class BracketPairValidate {
    2. private static Map<Character,Character> map;
    3. private static Set<Character> left;
    4. static{
    5. map = new HashMap<>(3);
    6. map.put(')','(');
    7. map.put(']','[');
    8. map.put('}','{');
    9. left = new HashSet<>(3);
    10. left.add('(');
    11. left.add('[');
    12. left.add('{');
    13. }
    14. public boolean isValid(String s){
    15. Deque<Character> deque = new ArrayDeque<>();
    16. for (int i = 0; i < s.toCharArray().length; i++) {
    17. char ch = s.charAt(i);
    18. if (left.contains(ch)){//如果是左括号则入栈
    19. deque.push(ch);
    20. }else if(map.containsKey(ch)){//如果是右括号则进入判断
    21. if (deque.isEmpty() || !deque.peek().equals(map.get(ch))){//判断栈顶元素是否是对应的左括号
    22. return false;
    23. }
    24. //取出栈顶元素
    25. deque.pop();
    26. }
    27. }
    28. return deque.isEmpty();
    29. }
    30. public static void main(String[] args) {
    31. BracketPairValidate validate = new BracketPairValidate();
    32. System.out.println(validate.isValid("(校验){[]}}"));
    33. }
    34. }

    原理:
    利用栈结构,如果遇到左括号:’(‘、’[‘、’{‘。则将符号入栈。遇到右括号:’)’、’]’、’}’。则判断栈顶的元素是否是对应的左括号。所以用了一个map,key为右括号,value为左括号。