Пошук уроків, статей та іншого контенту
Перевірте, чи всі дужки в рядку правильно збалансовані та закриті у правильному порядку.
Напишіть функцію solve(str), яка перевіряє, чи збалансовані дужки трьох типів — (), [], {} — у рядку str. Рядок може містити й інші символи (літери, цифри) — їх слід ігнорувати. Поверніть true, якщо кожна відкрита дужка закривається дужкою того самого типу у правильному порядку, і false в іншому випадку.
Приклади
Вхід: "([]{})"
Вихід: true
Вхід: "([)]"
Вихід: false
дужки закриваються у неправильному порядку
Вхід: "((("
Вихід: false
не всі дужки закриті
Ваше рішення
Підказки
Це класична задача на стек: кожну відкриваючу дужку кладіть у стек (масив), а на кожній закриваючій — знімайте останній елемент стека і перевіряйте, чи він відповідає типу.
У кінці стек має бути порожнім — інакше лишились незакриті дужки.
function solve(str) {
const pairs = { ")": "(", "]": "[", "}": "{" };
const stack = [];
for (const ch of str) {
if (ch === "(" || ch === "[" || ch === "{") {
stack.push(ch);
} else if (ch === ")" || ch === "]" || ch === "}") {
if (stack.pop() !== pairs[ch]) return false;
}
}
return stack.length === 0;
}Кожна закриваюча дужка має відповідати останній відкритій (вершині стека) — саме тому стек, а не лічильник: лічильник не помітив би неправильний порядок на кшталт "([)]". Символи поза набором дужок просто ігноруються умовою.