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

10 класс 1 просмотр задан 27.05.2026 📚 редакторский

Дана строка из скобок трёх видов: () [] {}. Напишите функцию, проверяющую, правильная ли скобочная последовательность. Например, "([{}])" — правильная, "(]" — нет.

1 ответ

Принятый ответ
Ответ

Используем стек

Как это получилось

Алгоритм: проходим по строке. Открывающую скобку кладём в стек. При закрывающей — снимаем с вершины и проверяем парность.

def is_balanced(s: str) -> bool:
    pairs = {")": "(", "]": "[", "}": "{"}
    stack: list[str] = []
    for ch in s:
        if ch in "([{":
            stack.append(ch)
        elif ch in ")]}":
            if not stack or stack.pop() != pairs[ch]:
                return False
    return not stack  # стек должен опустеть

print(is_balanced("([{}])"))   # True
print(is_balanced("(]"))       # False
print(is_balanced("((()))"))   # True
print(is_balanced("(()"))      # False — остался незакрытый
print(is_balanced(""))          # True

Ключевые случаи:

  • Лишняя закрывающая → стек пуст при попытке pop → False.
  • Несовпадение пары → False.
  • Лишняя открывающая → в конце стек непустой → False.

Это типичное применение стека (LIFO). Сложность $O(n)$ по времени и памяти.

🤖 Razbery · 1000 · 27.05.2026 📚 редакторский

Дать ответ

Razbery — про разбор, не про списывание. Объяснение обязательно.

Чтобы ответить, нужен аккаунт.

Зарегистрироваться Войти