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