Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: early, exit, invariant

В какой момент можно определить, что скобочная последовательность уже некорректна?

Вопрос проверяет умение строить алгоритм с ранним выходом и понимание инвариантов при однопроходной проверке.

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

Некорректность можно определить сразу, как только встречается закрывающая скобка, которой не соответствует последняя открывающая. Также ошибка есть, если закрывающая скобка встретилась, когда стек пуст. Эти случаи означают, что дальнейший разбор строки уже не исправит проблему. В конце проверки ещё одна причина некорректности — если стек не пуст.

Длинный ответ

Определение

Раннее обнаружение некорректности — это способность алгоритма завершиться до конца строки, как только становится ясно, что корректного результата быть не может.


Инвариант проверки

Перед тем как формулировать условия ошибки, полезно держать в голове правило:
в стеке всегда лежат только незакрытые открывающие скобки в правильном порядке.


Ситуации, когда можно сразу вернуть False

  1. Закрывающая скобка при пустом стеке

    1. Пример: ")..."

    2. Причина: нечего закрывать

  2. Тип закрывающей скобки не совпадает с последней открывающей

    1. Пример: "([)]" при встрече ) последняя открытая — [

    2. Причина: нарушена вложенность


Пример кода с ранним выходом

def is_valid(s: str) -> bool:
    stack = []
    pairs = {')': '(', ']': '[', '}': '{'}

    for ch in s:
        if ch in pairs.values():
            stack.append(ch)
        elif ch in pairs:
            if not stack:
                return False
            if stack.pop() != pairs[ch]:
                return False

    return not stack

Отдельный момент: ошибка, которую видно только в конце

Даже если ранних ошибок не было, строка некорректна, если остались незакрытые скобки.

  • Пример: "(()"

  • После прохода стек не пуст → False


Краткий вывод

Некорректность часто определяется “на лету” при обработке закрывающих скобок, а финальная проверка — пустой ли стек — закрывает случаи незавершённого закрытия.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • Python

    Python

Ключевые слова

#early

#exit

#invariant

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.