Top Coder SRM 628 Div 2 - 500 Point
If you are participate in Top Coder SRM 628 Div 2, this is solution for 500 point
import java.util.ArrayList;
public class BracketExpressions {
public static String ifPossible(String expression){
Character [] pattern1 = new Character[]{'{','}'};
Character [] pattern2 = new Character[]{'(',')'};
Character [] pattern3 = new Character[]{'[',']'};
char[] y = expression.toCharArray();
ArrayList<Character> data = new ArrayList<Character>();
for (int i = 0; i < y.length; i++) {
System.out.println("processing " + ((data.size()>0)?data.get(0).toString():-1) + " and " + y[i] );
if (data.size() > 0 && data.get(0) != 'X' && y[i] == 'X'){
System.out.println("Pop " + data.get(0) + " because meet X");
data.remove(0);
}
else if (y[i] == pattern1[0] || y[i] == pattern2[0]|| y[i] == pattern3[0] || y[i] == 'X' )
{
System.out.println("Push " + y[i]);
data.add(0, y[i]);
}
else if (y[i] == pattern1[1] || y[i] == pattern2[1]|| y[i] == pattern3[1]) {
if (data.size() > 0){
if (lawan(data.get(0)) == y[i] || data.get(0) == 'X'){
System.out.println("Pop " + data.get(0) + " " + y[i]);
data.remove(0);
}
else{
return "impossible";
}
}else{
return "impossible";
}
}
}
if (data.size() > 0)
{
return "impossible";
}
return "possible";
}
public static Character lawan(Character a){
if (a== '{')return '}';
else if (a== '[')return ']';
else return ')';
}
}
1
Kudos
1
Kudos