Функция checkBrackets

Функция checkBrackets


Ответ:

function checkBrackets(brackets) {
    const bracketsVariants = {
        "(": ")",
        "[": "]",
        "{": "}",
    };
    const stack = [];
    for (const bracket of brackets) {
        if (Object.keys(bracketsVariants).includes(bracket)) {
            stack.push(bracket);
            continue;
        }
        if (bracket !== bracketsVariants[stack.pop()]) {
            return false;
        }
    }

    return stack.length === 0;
}

Объяснение:

Объявляем две переменные: bracketsVariants и stack. Первая нужна для того, чтобы соотносить открывающую и закрывающую скобки (потому что они должны быть одинаковыми), а вторая - для отслеживания вложенности скобок.

Далее для каждой скобки проверяем:

  • если она открывающая, то кладём её в стек и переходим к следующей итерации,
  • если же скобка не открывающая, мы проверяем, соотносится ли последняя скобка в стеке с ней. Если соотносится, значит, всё верно; убираем последнюю скобку из стека и идём дальше. А если же скобки разные, мы просто возвращаем из функции false.

Последним этапом мы проверяем, осталось ли что-нибудь в стеке. Если да, то это значит, что какая-то из скобок не закрылась, и мы опять возвращаем false. А если в стеке ничего не осталось, это значит, что все скобки закрылись и нужно вернуть true.

Код для проверки:

function checkBrackets(brackets) {
    const bracketsVariants = {
        "(": ")",
        "[": "]",
        "{": "}",
    };
    const stack = [];
    for (const bracket of brackets) {
        if (Object.keys(bracketsVariants).includes(bracket)) {
            stack.push(bracket);
            continue;
        }
        if (bracket !== bracketsVariants[stack.pop()]) {
            return false;
        }
    }

    return stack.length === 0;
}

console.log(checkBrackets("[()]")); // true
console.log(checkBrackets("{[)]}")); // false
console.log(checkBrackets("(()")); // false
console.log(checkBrackets("[({()}[])]")); // true


Report Page