薄荷味儿的荔枝

导航

括号匹配问题 —— Deque双端队列解法

题目:

给定一个只包括 '(',')','{','}','[',']'?的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:
输入: "()"
输出: true

示例 2:
输入: "()[]{}"
输出: true

示例 3:
输入: "(]"
输出: false

示例 4:
输入: "([)]"
输出: false

示例 5:
输入: "{[]}"
输出: true

思路:

  我思路比较简单,就是从左往右看

  如果是 "(" "{" "[" 这三个的话,直接进入队列中

  如果遇到 ")" "}" "]" 这三个的话,就去看队列中的最后一个是不是和他匹配,如果是,那就移除最后一个,如果不是,那就直接跳出循环,肯定就不是一个合格的括号啦~(这时候队列里面还有没有匹配上的括号)

  tips:可以在最开始加个判断,如果是奇数,就肯定是不合格的括号~

代码如下:

    public static boolean isValid(String s) {
        if (s.length() % 2 == 1) {
            return false;
        }
        Map<String, String> map = new HashMap<String, String>();
        map.put(")", "(");
        map.put("}", "{");
        map.put("]", "[");
        
        int i = 0;
        Deque<String> queue = new LinkedList<String>();
        while(i < s.length()) {
            String now = s.substring(i, i+1);
            if (!queue.isEmpty() && map.containsKey(now)) {
                if (queue.getLast().equals(map.get(now))) {
                    queue.removeLast();
                } else {
                    break ;
                }
                
            } else {
                queue.offer(now);
            }
            i++;
        }
        
        if (queue.isEmpty()) {
            return true;
        } else {
            return false;
        }
    }

 

posted on 2019-08-23 17:24  薄荷味儿的荔枝  阅读(291)  评论(0编辑  收藏  举报