Для проверки подходит стек на базе Deque и ArrayDeque: открывающую скобку кладём в стек, закрывающую сравниваем с последней открытой. В конце стек должен быть пуст.
Как проверить скобки через стандартные коллекции Java
Для проверки подходит стек на базе Deque и ArrayDeque: открывающую скобку кладём в стек, закрывающую сравниваем с последней открытой. В конце стек должен быть пуст.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Напишите метод Java, который проверяет правильность скобочной последовательности из символов ()[]{}. Любые другие символы считаются ошибкой. Пустая строка корректна, null — некорректен. Используйте стандартные коллекции.
Ответ
Для проверки подходит стек на базе Deque и ArrayDeque: открывающую скобку кладём в стек, закрывающую сравниваем с последней открытой. В конце стек должен быть пуст.
Метод можно поместить в класс с импортами java.util.Deque и java.util.ArrayDeque:
static boolean balanced(String text) {
if (text == null) return false;
Deque<Character> stack = new ArrayDeque<>();
for (char c : text.toCharArray()) {
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
} else {
char expected;
if (c == ')') expected = '(';
else if (c == ']') expected = '[';
else if (c == '}') expected = '{';
else return false;
if (stack.isEmpty() || stack.pop() != expected) return false;
}
}
return stack.isEmpty();
}
Проверки: ([]) → true, ([)] → false, (( → false. Каждый символ обрабатывается один раз: O(n) времени и до O(n) памяти. push и pop работают с одним концом дека, обеспечивая порядок LIFO.
Источник: docs.oracle.com.