Проверка правильности скобок вопрос в java - PullRequest
0 голосов
/ 16 июня 2020

Входная строка действительна, если:

  • Открытые скобки должны быть закрыты скобками того же типа.
  • Открытые скобки должны быть закрыты в правильном порядке.

Обратите внимание, что пустая строка также считается действительной.

Вот мой код:

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

в строке, где проверяю условие для ')'. Пожалуйста, объясните

1 Ответ

0 голосов
/ 16 июня 2020

Думаю, вы решаете 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]

Ссылка

Решение

...