为什么这段代码在我的系统上能正常工作,并在HackersRank中抛出EmptyStackException

时间:2019-02-14 07:47:54

标签: java

https://www.hackerrank.com/challenges/counting-valleys/problem中存在一个计数谷问题 我知道我不是最好的解决方案,但是它在带有示例测试用例的系统上可以正常工作,但似乎在具有相同测试用例的hackersRank上失败。这会在“ climbStack.peek()”上引发emptyStack异常 我用J9编译器尝试了以下代码,但J7样式为hackerrank仅支持j7

// Complete the countingValleys function below.
static int countingValleys(int n, String s)
{
    Stack<String> climbStack = new Stack<String>();
    boolean mClimb = false;
    int valleyCount=0;
    String[] trek = s.split("");

    for(int i =0 ; i < trek.length; i++)
    {
        if(climbStack.empty() && trek[i].equals("U"))
        {
            mClimb = true;
            climbStack.push(trek[i]);
            continue;
        }
        else if(climbStack.empty() && trek[i].equals("D"))
        {
            mClimb = false;
            climbStack.push(trek[i]);
            continue;
        }

        if(climbStack.peek().equals(trek[i]))
        {
            climbStack.push(trek[i]);
        }
        else
        {
            climbStack.pop();
            if(climbStack.empty() && mClimb == false && i <= n)
            {
                valleyCount++;
            }
        }

    }
    return valleyCount;

}

private static final Scanner scanner = new Scanner(System.in);

public static void main(String[] args) throws IOException {
    //BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));

    int n = scanner.nextInt();
    scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

    String s = scanner.nextLine();

    int result = countingValleys(n, s);

    System.out.println(result);

    scanner.close();
}

输入 8 乌迪都(UDDDUDUU)

结果1

1 个答案:

答案 0 :(得分:1)

我的猜测是,方法split()在J7中的工作方式不同于J9。如果您的输入仅是'U'和'D'字符的字符串,并且需要将它们分成单个字母,那么我建议使用方法toCharArray()而不是split(),这将为您提供{{1}长度为8的}-使用您发布的示例输入,并且方法char[]自Java发行以来就很早。