Lintcode - Convert Expression to Reverse Polish Notation

来源:互联网 发布:淘宝好评能修改吗 编辑:程序博客网 时间:2024/06/05 21:35

Given an expression string array, return the Reverse Polish notation of this expression. (remove the parentheses)

Example

For the expression [3 - 4 + 5] (which denote by ["3", "-", "4", "+", "5"]), return [3 4 - 5 +] (which denote by ["3", "4", "-", "5", "+"])


public class Solution {    /**     * @param expression: A string array     * @return: The Reverse Polish notation of this expression     */    public ArrayList<String> convertToRPN(String[] expression) {        ArrayList<String> list = new ArrayList<String>();        Stack<String> stack = new Stack<String>();                for (int i = 0; i < expression.length; i++) {            String str = expression[i];            if (isOp(str)) {                if (str.equals("(")) {                    stack.push(str);                } else if (str.equals(")")) {                    while (!stack.isEmpty()) {                        String p = stack.pop();                        if (p.equals("(")) {                            break;                        }                        list.add(p);                    }                } else {                    while (!stack.isEmpty() && order(str) <= order(stack.peek())) {                        list.add(stack.pop());                    }                    stack.push(str);                }            } else {                list.add(str);            }        }        while (!stack.isEmpty()) {            list.add(stack.pop());        }        return list;    }        boolean isOp(String str) {        if (str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/")            || str.equals("(") || str.equals(")")) {            return true;        } else {            return false;        }    }    int order(String a) {        if (a.equals("*") || a.equals("/")) {            return 2;        } else if (a.equals("+") || a.equals("-")) {            return 1;        } else {            return 0;        }    }    }


0 0