Валидация корректного вложения скобок

Используйте стек открывающих скобок и проверяйте каждую закрывающую на соответствие вершине. В условии ошибка: строка '{()}' корректна и должна дать 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) в худшем случае.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее