LeetCode:20. 有效的括号

160 阅读1分钟

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
   private final static Map<Character,Character> map = new HashMap(){{
        put('{','}');
        put('[',']');
        put('(',')');
        put('?','?');
    }};

    public static boolean isValid(String s) {
        // 简单校验
        if(s.length() ==0 || s.length()%2 == 1){
            return false;
        }
        // 存储临时值
        LinkedList linkedList = new LinkedList();
        linkedList.add('?');
        // 遍历值
        // 1、如果map的key包含字符,说明是相对的第一个字符
        // 2、如果map的key不包含的话,比较value值是不是跟当前字符一致 一致则抵消调
        // 3、最后判断list中剩余的值是不是只有1个 如果只有1个说明在循环中,值都被抵消了,返回true,否则返回false
        for(int i=0;i<s.length();i++){
            if(map.containsKey(s.charAt(i))){
                linkedList.addLast(s.charAt(i));
            }else{
                if(map.get(linkedList.removeLast()) != s.charAt(i) ){
                    return false;
                }
            }
        }
        return linkedList.size() == 1;
    }
}

20. 有效的括号