Дана строка только из скобок (){}[]. Определите, закрывается ли каждая скобка скобкой своего типа в правильном порядке. Например, ()[]{} — корректная строка, (] и ([)] — нет.
Как проверить правильность скобочной последовательности?
Дана строка только из скобок (){}[]. Определите, закрывается ли каждая скобка скобкой своего типа в правильном порядке. Например, ()[]{} — корректная строка, (] и ([)] — нет.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дана строка только из скобок (){}[]. Определите, закрывается ли каждая скобка скобкой своего типа в правильном порядке. Например, ()[]{} — корректная строка, (] и ([)] — нет.
Решение
Для проверки валидности строки со скобками удобно использовать стек. Идея:
- Проходим по символам строки.
- Если символ — открывающая скобка, кладём её в стек.
- Если закрывающая — проверяем, что верхний элемент стека соответствует ей по типу.
- Если нет соответствия или стек пуст, строка невалидна.
- В конце стек должен быть пустым.
Пример на Python:
def isValid(s):
stack = []
pairs = {')': '(', '}': '{', ']': '['}
for char in s:
if char in '([{':
stack.append(char)
elif char in ')]}':
if not stack or stack.pop() != pairs[char]:
return False
return not stack
# Примеры
print(isValid("()")) # True
print(isValid("()[]{}")) # True
print(isValid("(]")) # False
Каждая скобка добавляется в стек или удаляется из него не более одного раза: время O(n), память O(n) в худшем случае. Пустая строка считается корректной. Функция предполагает, что вход содержит только перечисленные в условии скобки.