使用堆栈逆输入表达式

时间:2018-09-24 16:14:04

标签: string algorithm stack expression reverse

作为公司招聘流程之一,我遇到了编码方面的挑战。在该编码挑战中,问题之一是对表达式求逆。 例如, 输入:14-3 * 2/5 输出:5/2 * 3-14

我使用堆栈将每个数字(例如14或3)和表达式放入,然后再次将其弹出以形成输出。

输入格式为:num op num op num op num 因此,我们不必担心输入为-2。 num可以在-10 ^ 16到10 ^ 16之间。我完全在处理字符串,因此即使数字超过10 ^ 16的限制,我的算法也不会有任何问题。

我的算法通过了7个测试用例,但其中2个失败。 我不知道到底是什么情况。我也看不到测试用例。任何想法可能是什么。我知道没有足够的信息,但不幸的是我也没有这些信息。

// Complete the reverse function below.
static String reverse(String expression) {
    expression = expression.trim();
    if(expression == ""){
            return "";
        }
        Stack<String> stack = new Stack<String>();
        String num = "";
        for(int i=0; i<expression.length(); i++){
            char c = expression.charAt(i);
            if(c==' '){
                continue;
            }
            if(c == '+' || c == '-' || c == '*' || c == '/'){
                if(num != "") {
                    stack.push(num);
                }
                num = "";
                stack.push(Character.toString(c));
            } else{
                num += c;
            }
        }
        if(num != "") {
            stack.push(num);
        }

        String revExp = "";
        while(! stack.empty()){
            revExp = revExp + stack.pop();
        }

        return revExp;

}

0 个答案:

没有答案