Функция 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