JSFiddle - React, Tailwind, and code Playground
by Alexander
CSS
/*
Реализовать функцию checkSyntax(string), проверяющую на синтаксическую верность последовательность скобок. Задача не сводится к простой проверке сбалансированности скобок. Нужно еще учитывать их последовательность (вложенность).
Обратите вниамние на производительность вашего решения.
Решение должны быть компактным.
Решение должно быт простым, умещаться в 1м файле и содержать 20-30 строк кода или меньше.
Идеальное время решения на задачу не более 30 минут (задачу можно решить и за 10 минут).
Покажите решение, если нужно проверять следующий набор скобок: <,[,{,(
Изменится ли ваше решение, если нужно проверять только такой набор скобок: <,[,{
В случае ошибки возвращаем 1.
В остальных случаех возвращаем 0.
Тесты для 1го набора:
//*/
JavaScript
console.clear();
function checkSyntax(str){
var stack = [];
var tmp = str.split('');
for(var block in tmp){
switch(tmp[block]){
case '(':
case '<':
case '[':
stack.push(tmp[block]);
break;
case ')':
if(stack[stack.length-1]=='('){
stack.pop();
}
else return 1;
break;
case '>':
if(stack[stack.length-1]=='(<'){
stack.pop();
}
else return 1;
break;
case ']':
if(stack[stack.length-1]=='('){
stack.pop();
}
else return 1;
break;
}
}
if(stack.length !=0)
return 1;
return 0;
}
console.log(checkSyntax("---(++++)----") == 0);
console.log(checkSyntax("") == 0);
console.log(checkSyntax(") (") == 1);
//console.log(checkSyntax("} {") == 1);
console.log(checkSyntax("<( >)") == 1);
console.log(checkSyntax(" ( [)") == 1);
console.log(checkSyntax("{( [ <> () ] <> )}") == 0);
console.log(checkSyntax("before ( middle []) after ") == 0);
// и так далее...