נבחנתי בבית והנבלות עדיין לא החזירו תשובה,
אני לא הכי מנוסה ב JS
לקח לי חצי שעה ללמוד מה צריך ולכתוב את האלגוריתם, עם טעויות סינטקס קטנות וטעות בהגדרת גבולות הלולאה, שתיקנתי יותר מאוחר,
בסה"כ חרגתי פי 2 מהזמן.
אבל יותר מענין אותי האם יש דרך אחרת יותר יעילה וקריאה יותר.
צריך לכתוב פונקציה המקבלת string ומחזירה 1 אם הסוגריים בקלט מקוננים נכון ו- 0 אחרת.
דוגמאות :
You need to consider three kinds: (), [], <> and only these kinds.
Examples:
verify("---(++++)----") -> 1
verify("") -> 1
verify("before ( middle []) after ") -> 1
verify(") (") -> 0
verify("} {") -> 1 //no, this is not a mistake.
verify("<( >)") -> 0
verify("( [ <> () ] <> )") -> 1
verify(" ( [)") -> 0
קוד HTML:
function verify(text)
{
var stack = new Array();
var myMap = new Map();
myMap.set('[' ,']');
myMap.set('(',')');
myMap.set( '<','>');
myMap.set('”', '”');
var regOpen = /[([<"]/ ;
var regClose = /[\)\]\>"]/ ;
var length= text.length-1;
var textArr= text.split("");
var pop;
console.log(length);
for (i=0;i<=length; i++ )
{
if( textArr[i].match(regOpen) )
stack.push(textArr[i]);
else if( textArr[i].match(regClose) )
{
pop = myMap.get(stack.pop());
if( pop!= textArr[i] )
return 0;
}
}
return (stack.length==0 ? 1:0);
}