LeetCode每日一题:有效的括号(No.20)

301 阅读1分钟

题目:有效的括号


给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例:


输入: "()"
输出: true

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

输入: "(]"
输出: false

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

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

思考:


这道题可以使用栈实现。
循环判断字符如果是前括号直接入栈,如果是后括号,先判断栈是否为空,为空则直接返回false。
不为空则将栈顶括号出栈,与当前括号比较是否配对,不配对则返回false,配对则继续循环。
字符串循环结束后,判断存放括号的栈内是否为空,为空即返回true,否则返回false。

实现:


    class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++){
            char ch = s.charAt(i);
            if(ch == '(' || ch == '[' || ch == '{'){
                stack.push(ch);
            }else{
                if(stack.isEmpty()){
                    return false;
                }
                char topChar = stack.pop();
                if(ch == ')' && topChar != '('){
                    return false;
                }else if(ch == ']' && topChar != '['){
                    return false;
                }else if(ch == '}' && topChar != '{'){
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }
}