Бесплатная бета: 30 дней полного доступа, без карты.Зарегистрироваться бесплатно

Мы используем необходимые куки для работы сайта (вход и язык). Формы обратной связи и сообщения об ошибке дополнительно используют Google reCAPTCHA для защиты от спама. Она загружается только если вы согласитесь. Политика конфиденциальности

Полевой справочник

Стек (LIFO)

O(n)

Клади каждый элемент в стек по мере встречи; когда что-то должно совпасть с последним непарным партнёром, сними верхний элемент и сравни. То, что положено последним, всегда проверяется первым (last in, first out).

Сигналы

корректные скобки / сбалансированные скобкисопоставить самую недавнюю открывающую с ближайшей закрывающейотмена, откат к последнему состоянию, вложенная структуравычислить выражение с вложенными операторамиобработать в порядке, обратном порядку поступления

Шаблон

function isValid(s) {
    const stack = [];
    const pairs = { ')': '(', ']': '[', '}': '{' };
    for (const ch of s) {
        if (ch in pairs) {
            if (stack.pop() !== pairs[ch]) return false;
        } else {
            stack.push(ch);
        }
    }
    return stack.length === 0;
}

Похоже, но не то

  • Монотонный стек: Обычному стеку нужно лишь сопоставлять открывающие/закрывающие в порядке поступления, снимая верхний элемент при прямом совпадении. Монотонный стек решает другую задачу: он держит элементы отсортированными, снимая их, чтобы найти для каждого элемента ближайший больший или меньший сосед.

n до 1e5 символов/токенов -> O(n): каждый элемент кладётся один раз и снимается не более одного раза.

Изучить этот паттерн