Valid Parentheses

3.16看覃超的直播,他直接用了Java 的Stack 没有用LinkedList模拟stack


这题看起来简单,但它的条件:
"()" and "()[]{}" are all valid but "(]" and "([)]" are not.
不够充足,它还需要满足:([])这种是正确的,也就是数学公式里的那种。我一开始以为不能这么包含,出现一个,下一个必须就是前一个的配对,于是直接检查了奇数偶数项是否配对;这样是不对的。

正确的做法是要维护一个栈,独到一个符号的时候看栈顶那个元素是不是跟它配对。栈对应的数据结构是LinkedList。

已犯错误:

  1.                if (stack.isEmpty() || !stack.pop().equals("(")) return false;
    

没有判空。另外,pop是跟push一对的,offer和add是不能往栈里加东西的。

  1. 最后没有判断栈是否为空,而是判断是否是len%2 == 0.
    public boolean isValid(String s) {
        int len = s.length();

        LinkedList stack = new LinkedList<>();

        for (int i = 0; i < len; i++) {
            switch (String.valueOf(s.charAt(i))) {
                case "(":
                    stack.push("(");
                    break;
                case "{":
                    stack.push("{");
                    break;
                case "[":
                    stack.push("[");
                    break;
                case ")":
                    if (stack.isEmpty() || !stack.pop().equals("(")) return false;
                    break;
                case "}":
                    if (stack.isEmpty() || !stack.pop().equals("{")) return false;
                    break;
                case "]":
                    if (stack.isEmpty() || !stack.pop().equals("[")) return false;
                    break;
            }
        }

        return stack.isEmpty();
    }

你可能感兴趣的:(Valid Parentheses)