【问题标题】:Reverse Polish Notation Code Review反向波兰符号代码审查
【发布时间】:2015-02-22 18:59:15
【问题描述】:

我一直在尝试在 SPOJ 上解决这个问题:http://www.spoj.com/problems/ONP/

我已尝试针对上述问题实施两个堆栈解决方案。它在我的系统上运行良好,但每次我尝试将以下代码提交到 SPOJ 引擎时都会收到“错误答案”。

import java.io.*;
import java.util.Stack; 
import java.util.Scanner;


public class InfixToPostfix {

    public static String postfixString(String expression) {

        Stack <Character> valueStack = new Stack <Character>();
        Stack <Character> operatorStack = new Stack <Character>();

        char[] tokens = expression.toCharArray();

        for(char c : tokens) {

            if(c == '('){
                continue;
            }

            else if(c == '+' || c == '-' || c == '*' || c == '/' || c == '^') {
                operatorStack.push(c);
                continue;
            }

            else if(c == ')') {
                valueStack.push(operatorStack.peek());
                operatorStack.pop();
                continue;
            }

            else {
                valueStack.push(c);
                continue;
            }
        }
        return valueStack.toString();
    }
    public static void main (String [] args)throws java.lang.Exception {

        String inputString = "";
        int n1;
        Scanner numberOfTestCases = new Scanner(System.in);
        try
        {
            n1 = numberOfTestCases.nextInt();
            StringBuilder[] sbuf = new StringBuilder[n1];
            Scanner inputExpression = new Scanner(System.in);

            for(int i = 0; i < n1; i++) {

                sbuf[i] = new StringBuilder();

                if(inputExpression.hasNextLine()) {

                    inputString = inputExpression.nextLine();

                    sbuf[i].append(postfixString(inputString).replaceAll("\\[", "").replaceAll("]", "").replaceAll(", ", ""));
                }
                else {
                    break;
                }
            }


            for(int i = 0; i < n1; i++) {
                System.out.println(sbuf[i].toString());
            }
        }
        catch (Exception e) {
           // System.out.println("");
           System.out.println(e.getMessage());  
            // numberOfTestCases.next();
        }
        System.exit(0);
    }

}

我不知道哪里出错了;我已经尝试了所有可能的测试用例。

P.S.:问题假设所有输入都用括号括起来;无需包含任何用于解析运算符优先级的代码。

【问题讨论】:

    标签: java polish-notation


    【解决方案1】:
    return valueStack.toString();
    

    这不会返回所需的格式:它返回由 [ 和 ] 界定的逗号分隔格式,这不是指定的格式。

    但我确定还有其他问题。

    • 我在问题陈述中没有看到任何与您的 PS 相对应的内容:相反,它特别提到了运算符优先级。

    • 您确定您已经“尝试了所有可能的测试用例”吗?试试 (1+2)/3 和 1+3/2。

    • 在 ')' 的情况下,您正在查看您尚未推送的内容。

    • 我也不明白你为什么需要两个堆栈。

    鉴于问题陈述,您需要的是递归下降表达式解析器或 Dijkstra Shunting-yard 算法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多