Given an expression string array, return the Reverse Polish notation of this expression. (remove the parentheses)
Aka, convert infix notation to postfix notation.
Example
For the expression [3 - 4 + 5]
(which denote by ["3", "-", "4", "+", "5"]), return[3 4 - 5 +]
(which denote by ["3", "4", "-", "5", "+"])
public List<String> convertToRPN(String[] expression) {
List<String> rpn = new ArrayList<>();
Stack<String> opstack = new Stack<>();
for(String op:expression) {
if("+-*/".contains(op)) {
while(!opstack.isEmpty() && getPriority(opstack.peek()) >= getPriority(op)) {
rpn.add(opstack.pop());
}
opstack.push(op);
} else if("(".equals(op)) {
opstack.push(op);
} else if(")".equals(op)) {
while(!"(".equals(opstack.peek())) {
rpn.add(opstack.pop());
}
opstack.pop();
}
else {
rpn.add(op);
}
}
while(!opstack.isEmpty()) {
rpn.add(opstack.pop());
}
return rpn;
}
private int getPriority(String s) {
char c = s.charAt(0);
if(c == '+' || c== '-') {
return 1;
} else if(c == '*' || c == '/') {
return 2;
}
return 0;
}