【问题标题】:Why do I get a wrong result?为什么我会得到错误的结果?
【发布时间】:2021-12-22 13:18:37
【问题描述】:

下面是我的 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();
    }
}

【问题讨论】:

    标签: string stack


    【解决方案1】:

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

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

    希望对您有所帮助,如果没有,请告诉我,我可以尝试澄清更多。

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多