Используйте стек открывающих скобок и проверяйте каждую закрывающую на соответствие вершине. В условии ошибка: строка '{()}' корректна и должна дать true.
Валидация корректного вложения скобок
Используйте стек открывающих скобок и проверяйте каждую закрывающую на соответствие вершине. В условии ошибка: строка '{()}' корректна и должна дать true.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо реализовать функцию, которая определяет, правильно ли расставлены скобки в переданной строке.
function checkBrackets(str) {
}
// '({{}})'
console.log(checkBrackets('([](){{()}})')) // true
console.log(checkBrackets('()[{}]')) // true
console.log(checkBrackets('({[})]')) // false
console.log(checkBrackets('([[]))')) // false
console.log(checkBrackets('{()}')) // false
// Предположение: входная строка состоит исключительно из символов ()[]{}
Ответ
Используйте стек открывающих скобок и проверяйте каждую закрывающую на соответствие вершине. В условии ошибка: строка '{()}' корректна и должна дать true.
function checkBrackets(str) {
const stack = [];
const pairs = { ')': '(', ']': '[', '}': '{' };
for (const char of str) {
if ('([{'.includes(char)) stack.push(char);
else if (!(char in pairs) || stack.pop() !== pairs[char]) return false;
}
return stack.length === 0;
}
При преждевременной закрывающей скобке pop() вернёт undefined, и проверка завершится ошибкой. Остаток в стеке означает незакрытые скобки. Пустая строка корректна. Время O(n), память O(n) в худшем случае.