zoukankan      html  css  js  c++  java
  • 括号匹配问题 —— 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;
            }
        }
  • 相关阅读:
    mysql分页查询优化
    java反射及Method的Invoke方法(转载)
    java需会(转载)
    Java注解(Annotation)原理详解
    深入分析JDK动态代理
    Java并发编程:volatile关键字解析
    安装hadoop
    linux 配置ssh免密登录
    安装Centos 7 并且配置远程登录
    MAC安装VMware fusion
  • 原文地址:https://www.cnblogs.com/BulingBuling/p/11401448.html
Copyright © 2011-2022 走看看