Answer

Answer

t.me/js_test

Ответ:

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