Проблема: Напишите функцию, которая принимает строку скобок и определяет, допустим ли порядок скобок. Функция должна возвращать true
, если строка допустима, и false
, если она недействительна.
Примеры:
"()" => true
")(()))" => false
"(" => false
"(())((()())())" => true
- В моем решении этой проблемы я немного изменил код. В моем решении вы можете добавить любые круглые скобки, например: (), {}, []. Не беспокойтесь, это просто оператор «или».
// Если у нас есть открывающая скобка, мы добавляем ее в стек
// Если это закрывающая скобка, извлеките ее из стека.
//Если извлеченный из стека элемент, который является последней открывающей скобкой, не соответствует соответствующей закрывающей скобке в карте, то верните 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);
}
Спасибо за чтение!