算法题笔记-easy难度-05有效的括号(leetcode第20题)

128 阅读1分钟

题目地址:leetcode-cn.com/problems/va…

思路:这题利用栈先进后出的原理,把所有左括号放进栈,遇到右括号时就和栈顶的进行比较。如果不匹配就返回false。最后检查栈的大小。如果栈的大小不为0,那么也属于有左括号没有匹配上,返回false。

上代码:

class Solution {
    public boolean isValid(String s) {
        if (s.length()%2 == 1) {
            return false;
        }
        Map<Character, Character> map = new HashMap<>();
        map.put('(',')');
        map.put('[',']');
        map.put('{','}');

        Stack<Character> stack = new Stack<>();
        for (int i=0;i<s.length();i++) {
            char c = s.charAt(i);
            if (map.containsKey(c)) {
                stack.push(c);
                continue;
            }
            if (map.containsValue(c)) {
                if (stack.size() == 0) {
                    return false;
                } else {
                    Character pop = stack.pop();
                    if (map.get(pop) != c) {
                        return false;
                    }
                }
            }
        }
        return stack.size() == 0;
    }
}