Валидация правильности размещения скобок разных типов

Для скобок разных типов нужен стек: открывающую кладём в него, закрывающую сравниваем с последней открытой. Некоторые ожидаемые результаты в условии противоречат правилам парности.

Короткий ответ

Что ответить на собеседовании

Для скобок разных типов нужен стек: открывающую кладём в него, закрывающую сравниваем с последней открытой. Некоторые ожидаемые результаты в условии противоречат правилам парности.

Подробный разбор

Ответ с пояснениями

Условие

Задача состоит в реализации функции, которая определяет, корректно ли расставлены в строке три вида скобок:

  1. Круглые — ()
  2. Квадратные — []
  3. Фигурные — {} Функция должна вернуть true, если все скобки открыты и закрыты в правильном порядке и вложены друг в друга согласно правилам парности, иначе — false.
function checkBrackets(str: string): boolean {
 // code
}

// checkBrackets('(') === false
// checkBrackets(')') === true
// checkBrackets('[]') === false
// checkBrackets('[()]') === true
// checkBrackets('()[{}])' === true
// checkBrackets('(){[}') === false

Ответ

Для скобок разных типов нужен стек: открывающую кладём в него, закрывающую сравниваем с последней открытой. Некоторые ожидаемые результаты в условии противоречат правилам парности.

function checkBrackets(str: string): boolean {
  const pairs: Record<string, string> = { ')': '(', ']': '[', '}': '{' };
  const stack: string[] = [];
  for (const ch of str) {
    if ('([{'.includes(ch)) stack.push(ch);
    else if (Object.hasOwn(pairs, ch) && stack.pop() !== pairs[ch]) return false;
  }
  return stack.length === 0;
}

Здесь прочие символы игнорируются. Корректные результаты: ')' → false, '[]' → true, '()[{}])' → false. Остальные примеры согласованы с условием. Время O(n), дополнительная память O(n).

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

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

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

Подробнее