Правильная скобочная последовательность

Используйте стек открывающих скобок. Каждая закрывающая должна соответствовать верхней; после обработки всех символов стек обязан быть пуст.

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

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

Используйте стек открывающих скобок. Каждая закрывающая должна соответствовать верхней; после обработки всех символов стек обязан быть пуст.

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

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

Условие

Правильная скобочная последовательность

Рассмотрим последовательность, состоящую из круглых, квадратных и фигурных скобок '(', ')', '{', '}', '[', ']'. Программа должна определить, является ли данная скобочная последовательность правильной.

  • Пустая последовательность является правильной.
  • Если A — правильная последовательность, то последовательности (A), [A], {A} — правильные.
  • Если A и B — правильные последовательности, то последовательность AB — правильная.

Формат ввода: В единственной строке записана скобочная последовательность, содержащая не более 100000 скобок.

Формат вывода: Если данная последовательность правильная, то программа должна вывести строку yes, иначе строку no.

Ответ

Используйте стек открывающих скобок. Каждая закрывающая должна соответствовать верхней; после обработки всех символов стек обязан быть пуст.

import sys

s = sys.stdin.readline().rstrip('\r\n')
stack = []
pairs = {')': '(', ']': '[', '}': '{'}
valid = True
for char in s:
    if char in '([{':
        stack.append(char)
    elif char in pairs:
        if not stack or stack.pop() != pairs[char]:
            valid = False
            break
    else:
        valid = False
        break
print('yes' if valid and not stack else 'no')

Время O(n), память O(n). Проверка только количества скобок недостаточна: последовательность ([)] имеет равные количества, но неправильную вложенность. Пустая строка корректно даёт yes.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее