Loading

20. [栈]有效的括号

20. 有效的括号

本题使用一个栈,在遍历过程中存放左括号;再使用一个哈希表,将左括号与右括号构成键值对,这样可以简化左括号出栈的判断逻辑。然后使用一个循环遍历s,如果为左括号则入栈,如果在栈不为空的情况下,前一个左括号的所对的右括号就是当前遍历的右括号,则允许出栈,否则可直接返回false,因为没有任何一个括号能消除右括号,不构成有效括号。

// 执行用时: 2 ms , 在所有 Java 提交中击败了 77.81% 的用户 
// 内存消耗: 37.2 MB , 在所有 Java 提交中击败了 13.83% 的用户


class Solution {
    public boolean isValid(String s) {
        if(s.equals("")){
            return true;
        }
        HashMap<Character, Character> hashMap = new HashMap<>();
        hashMap.put('(',')');
        hashMap.put('[',']');
        hashMap.put('{','}');
        LinkedList<Character> stack = new LinkedList<>();
        for(int i = 0; i < s.length(); i++){
            char c = s.charAt(i);
            if (hashMap.containsKey(c)){
                stack.offer(c);
            } else if (!stack.isEmpty() && hashMap.get(stack.peekLast()) == c){
                stack.pollLast();
            } else {
                return false;
            }
        }
        return stack.isEmpty();
    }
}
posted @ 2020-10-24 10:49  上海井盖王  阅读(90)  评论(0)    收藏  举报