Проблема: Напишите функцию, которая принимает строку скобок и определяет, допустим ли порядок скобок. Функция должна возвращать true, если строка допустима, и false, если она недействительна.

Примеры:

"()"              =>  true
")(()))"          =>  false
"("               =>  false
"(())((()())())"  =>  true
  1. В моем решении этой проблемы я немного изменил код. В моем решении вы можете добавить любые круглые скобки, например: (), {}, []. Не беспокойтесь, это просто оператор «или».

// Если у нас есть открывающая скобка, мы добавляем ее в стек

// Если это закрывающая скобка, извлеките ее из стека.
//Если извлеченный из стека элемент, который является последней открывающей скобкой, не соответствует соответствующей закрывающей скобке в карте, то верните false

// Если длина стека не равна нулю, возвращаем false

function validParentheses(parens){
  let stack = [];
  let map = {
    '(' : ')',
    '{' : '}',
    '[' : ']'
  }
  
  for (var s of parens) {
   if (s === '(' || s === '{' || s === '[' ) {stack.push(s)}
   else {let last = stack.pop(); if(s !== map[last]){return false}; } 
 }
  if(stack.length !== 0) {return false}
  return true;
}

2. Использование регулярных выражений:

function validParentheses(parens){
  var re = /\(\)/;
  while (re.test(parens)) parens = parens.replace(re, "");
  return !parens;
}

3. Использование тернарного оператора:

function validParentheses(parens){
  var result = 0;
  
  for (var i = 0 ; i < parens.length && result>= 0; i++) {
    result+= (parens[i] == '(') ? 1 : -1;    
  }
  
  return (result == 0);
}

Спасибо за чтение!