为什么我会得到错误的结果?

Why do I get a wrong result?

下面是我的 Leetcode 20 代码。(给定一个仅包含字符 '(', ')', '{', '}', '[' 和 ']' 的字符串 s,确定输入是否字符串有效。

如果满足以下条件,则输入字符串有效:

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

当输入为“(])”时,我仍然是正确的。任何人都可以让我知道我的代码有什么问题吗?谢谢!

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{
                if(stack.empty()){
                    return false;
                }
                if(c == ')' && stack.peek() == '('){
                    stack.pop();
                }
                if(c == ']' && stack.peek() == '['){
                    stack.pop();
                }
                if(c == '}' && stack.peek() == '{'){
                    stack.pop();
                }
            }
            
        }return stack.empty();
    }
}

在 for 循环的第二次迭代中,您有 char ],它与第一个条件不匹配,因此它继续到 else 块。其他 if 语句的 None 匹配,因此它不知道该怎么做,只是从循环的第 3 次迭代开始,在那里它看到 ) 并且还看到 ( 偷看所以 return 是空的。这就是问题所在。您需要在 else 块中添加一个额外的 else 以捕获与 4 个 ifs 不匹配的任何内容。

为了修复此特定测试,请仅添加对 ] 字符的检查。如果你看到那个角色而你还没有看到任何 [s 那么 return false

希望对您有所帮助,如果没有,请告诉我,我会尽力澄清更多。