Как проверить правильность скобочной последовательности?

Дана строка только из скобок (){}[]. Определите, закрывается ли каждая скобка скобкой своего типа в правильном порядке. Например, ()[]{} — корректная строка, (] и ([)] — нет.

Короткий ответ

Что ответить на собеседовании

Дана строка только из скобок (){}[]. Определите, закрывается ли каждая скобка скобкой своего типа в правильном порядке. Например, ()[]{} — корректная строка, (] и ([)] — нет.

Подробный разбор

Ответ с пояснениями

Условие

Дана строка только из скобок (){}[]. Определите, закрывается ли каждая скобка скобкой своего типа в правильном порядке. Например, ()[]{} — корректная строка, (] и ([)] — нет.

Решение

Для проверки валидности строки со скобками удобно использовать стек. Идея:

  • Проходим по символам строки.
  • Если символ — открывающая скобка, кладём её в стек.
  • Если закрывающая — проверяем, что верхний элемент стека соответствует ей по типу.
  • Если нет соответствия или стек пуст, строка невалидна.
  • В конце стек должен быть пустым.

Пример на 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) в худшем случае. Пустая строка считается корректной. Функция предполагает, что вход содержит только перечисленные в условии скобки.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку