20. 有效的括号(高频题)


20. 有效的括号

题目

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

解题思路

用一个栈保存左括号,再用右括号来匹配。
详见P386

代码

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for (char c : s.toCharArray()) {
            if (c == '(' || c == '{' || c == '[') {
                stack.push(c);
            } else {
                //c是右括号
                if (!stack.isEmpty() && stack.peek() == leftOf(c)) {
                    //能匹配。就从栈中弹出被匹配的左括号
                    stack.pop();
                } else {
                    //和最近的左括号不匹配
                    return false;
                }
            }
        }
        //所有的左括号都被匹配完了么?没完就是证明括号不合法
        return stack.isEmpty();
    }

    //返回对应的左括号类型
    public char leftOf(char c) {
        if (c == '}') return '{';
        if (c == ')') return '(';
        return '[';
    }
}

文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录