20 有效的括号

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

有效字符串需满足:

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

示例 1:

输入: "()"
输出: true

示例 2:

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

示例 3:

输入: "(]"
输出: false

示例 4:

输入: "([)]"
输出: false

示例 5:

输入: "{[]}"
输出: true

左括号后续一旦是错误的右括号或者没有后续的时候,字符串便无效。使用栈存储字符,读到左括号便存在栈中,读到右括号就判断前面的符号是否是合适的左括号,如果不是字符串便无效,如果是的便将左括号出栈。最后判断是否所有左括号都出栈即匹配完成。时间复杂度 \(O(n)\),空间复杂度 \(O(n)\)

    public boolean isValid(String s) {
        char[] chars = s.toCharArray();
        Stack<Character> stack = new Stack<>();
        for (char c : chars) {
            if (c == '(' || c == '{' || c == '[') {
                stack.push(c);
            } else {
                int size = stack.size();
                if (size == 0) {
                    return false;
                }
                Character top = stack.peek();
                if ((c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[')) {
                    return false;
            	}
                stack.pop();
            }
        }
        if (stack.size() != 0){
            return false;
        }
        return true;
    }
posted @ 2020-11-20 09:51  PotatoTed  阅读(90)  评论(0)    收藏  举报