Hola – כללי -2

השאלה הייתה לכתוב פונקציה שמקבלת 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;