השאלה הייתה לכתוב פונקציה שמקבלת string שמכיל סוגריים ובודק שהביטוי תקין לדוגמא: (({{[]}})) זה תקין כי עבור כל סוגר פותח יש סוגר שסוגר אותו.
הביטוי ([({))} לדוגמא לא טוב כי המיקום של הסוגר האחרון לא במקום הנכון וחסר סוגר מרובע אחד.
סעיף ב' אותה שאלה רק תוסיף גם את הסוגר | שהוא וההופכי שלו זהים בצורה.
הפתרון הוא להשתמש במחסנית
public static boolean check (String s)
{
Stack<Character> st = new Stack<Character>();
Character old_ch = null,ch =null;
for (int i=0;i<s.length();i++)
{
ch=s.charAt(i);
if (ch=='(' ||ch=='<' ||ch=='[' ||ch=='{' )
st.push(ch);
else{
if (ch==')' ||ch=='>' ||ch==']' ||ch=='}' ){
if (st.isEmpty())
return false;
old_ch =st.pop();
if (old_ch=='(' && ch!=')') return false;
if (old_ch=='[' && ch!=']') return false;
if (old_ch=='{' && ch!='}') return false;
if (old_ch=='<' && ch!='>') return false;
}
}
}
if(!st.empty())
return false;
return true;