Решение задачи "Правильные скобки" на JavaScript
Разберем популярную задачу валидации скобочной последовательности.
Постановка задачи
Дана некоторая строка, содержащая символы '(', ')', '{', '}', '[' и ']'. Необходимо определить, является ли данная строка валидной скобочной последовательностью.
Скобочная последовательность является валидной при выполнении двух условий:
  1. Открывающие скобки закрываются скобками того же типа
  2. Открывающие скобки закрываются в правильном порядке
Решение
Рассмотрим решение и попробуем разобраться по шагам.
/**
 * @param {string} s
 * @return {boolean}
 */
const isValid = (s) => {
  const map = {
    "(": ")",
    "[": "]",
    "{": "}",
  };
  const stack = [];
  for (let i = 0; i < s.length; i++) {
    if (stack.length > 0 && map[stack[stack.length - 1]] === s[i]) {
      stack.pop();
    } else {
      stack.push(s[i]);
    }
  }
  return stack.length === 0;
};
Временная сложность: O(n)
Пространственная сложность: O(n)
  1. Сохраняем целевые пары скобок в виде объектов с ключами и значениями.
  2. Добавляем символы строки в массив стека в цикле for.
  3. Если закрывающая скобка соответствует последней открытой скобке в стеке — удаляем её из массива.
  4. Возвращаем true, если в конце стек остаётся пустым, иначе возвращаем false.