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);

// и так далее...