【问题标题】:Checking correct brackets question in java在java中检查正确的括号问题
【发布时间】:2020-06-16 15:47:02
【问题描述】:

输入字符串在以下情况下有效:

  • 左括号必须用相同类型的括号括起来。
  • 开括号必须以正确的顺序闭合。

请注意,空字符串也被认为是有效的。

这是我的代码:

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        int len = s.length();
        for(int i=0;i<len;i++){
            char cur = s.charAt(i);
            if(cur=='{'){
                stack.push('{');
            }
            else if(cur=='['){
                stack.push('[');
            }
            else if(cur =='('){
                stack.push('(');
            }
            else if(stack.peek()=='(' && cur==')'){
                System.out.println(stack.peek());
                stack.pop();
            }
            else if(stack.peek()=='[' && cur==']'){
                stack.pop();
            }
            else if(stack.peek()=='{' && cur=='}'){
                stack.pop();
            }

        }

        if(stack.empty()) return true;
        else return false;

    }

}

当我输入如下:

")"

我收到一个错误:

java.util.EmptyStackException

在我检查')' 条件的行中。请解释

【问题讨论】:

  • 你需要调试伙伴。这就是你可以改进你的逻辑的方法
  • 是的......我看到了问题。提示:如果输入的第一个字符是 ) 实际会发生什么?仔细阅读代码。 (试试“橡皮鸭调试”....)
  • 因为在这种情况下,你的堆栈是空的,你试图从中弹出一些东西。不久前有一个similar question

标签: java algorithm brackets


【解决方案1】:

我猜你正在解决LeetCode 20,你可以稍微简化你的代码。例如,return stack.isEmpty(); 足以满足您的 return 语句。

这里有更易读的版本:

Java

class Solution {
    public boolean isValid(String baseString) {
        Stack<Character> stack = new Stack<Character>();

        for (char character : baseString.toCharArray()) {
            if (character == '(')
                stack.push(')');

            else if (character == '{')
                stack.push('}');

            else if (character == '[')
                stack.push(']');

            else if (stack.isEmpty() || stack.pop() != character)
                return false;

        }

        return stack.isEmpty();
    }
}

C++

class Solution {
    public boolean isValid(String baseString) {
        Stack<Character> stack = new Stack<Character>();

        for (char character : baseString.toCharArray()) {
            if (character == '(')
                stack.push(')');

            else if (character == '{')
                stack.push('}');

            else if (character == '[')
                stack.push(']');

            else if (stack.isEmpty() || stack.pop() != character)
                return false;

        }

        return stack.isEmpty();
    }
}

Python

class Solution:
    def isValid(self, base_string):
        memo = {')': '(', '}': '{', ']': '['}
        stack = [0]
        for character in base_string:
            if character in memo:
                if stack.pop() != memo[character]:
                    return False
            else:
                stack.append(character)
        return stack == [0]

参考

Solution

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    相关资源
    最近更新 更多