️️
Size: a a a
️️
️️
️️
function js(text){
var i, l=text.length, char, last, stack=[];
for(i=0; i<l; i++){
char=text[i];
if(char=="{" || char=="("){
stack.push(char);
last=char;
}else if(char == '}' || char == ")"){
if(last){
if((char == '}' && last == "{") || (char == ')' && last == '('))
{
stack.pop();
last = stack.length > 0 ? stack[stack.length - 1] : undefined;
}
}else{
return false;
}
}
}
return stack.length==0;
}
️️
Но на самом деле все это можно реализовать намного проще. Никаких строк накапливать не надо вообще. Нужно просто завести счетчик открытых скобок, который увеличивается на 1 для ( и уменьшается на 1 для ). Скобки являются сбалансированными если в процессе подсчета этот счетчик никогда не становился отрицательным и в конце подсчета он равен строго 0.
A
A
A
SS
Но на самом деле все это можно реализовать намного проще. Никаких строк накапливать не надо вообще. Нужно просто завести счетчик открытых скобок, который увеличивается на 1 для ( и уменьшается на 1 для ). Скобки являются сбалансированными если в процессе подсчета этот счетчик никогда не становился отрицательным и в конце подсчета он равен строго 0.
RD
function js(text){
var i, l=text.length, char, last, stack=[];
for(i=0; i<l; i++){
char=text[i];
if(char=="{" || char=="("){
stack.push(char);
last=char;
}else if(char == '}' || char == ")"){
if(last){
if((char == '}' && last == "{") || (char == ')' && last == '('))
{
stack.pop();
last = stack.length > 0 ? stack[stack.length - 1] : undefined;
}
}else{
return false;
}
}
}
return stack.length==0;
}
A
A
S
S
S
A
A
S
A