计算山谷数

时间:2019-05-13 16:35:53

标签: java algorithm

我在hackerRank上遇到问题,问题是:

问题陈述

在这里,我们必须计算XYZ人访问过的山谷的数量。

山谷是指一系列从海平面以下的连续步骤,从海平面向下的一个步骤开始,直到海平面向上的一个步骤。

上一步U,下一步D。我们将以字符串形式,即

给出XYZ人走过的步数以及上下波动
UUDDUDUDDUU

样本输入

8
UDDDUDUU

示例输出

1

说明

如果我们将_表示为海平面,将上升表示为/,将下降表示为\,则加里的涨幅可以绘制为:

_/\      _
   \    /
    \/\/

他进入并离开一个山谷。

我编写的代码不起作用

static int countingValleys(int n, String s) {    
    int count = 0;
    int level = 0;
    String[] arr = s.split("");
    for(int i = 0; i<n;i++){
        if(arr[i] == "U"){
            level++;
        } else{
            level--;
        }    
        if(level==0 && arr[i]=="U"){
            count++;
        }
    }
    return count;
}

但是我发现了另一个解决方案,但是不管我怎么看,逻辑都与我的相同:

static int countingValleys(int n, String s) {
    int v = 0;     // # of valleys
    int lvl = 0;   // current level
    for(char c : s.toCharArray()){
        if(c == 'U') ++lvl;
        if(c == 'D') --lvl;

        // if we just came UP to sea level
        if(lvl == 0 && c == 'U')
            ++v;
    }
    return v;
}

那么我在这里错过了什么导致我的行不通的区别? 谢谢。

1 个答案:

答案 0 :(得分:1)

在Java中,您需要执行以下操作以比较字符串值:

        if("U".equals (arr[i])) {

不是这个:

        if(arr[i] == "U") {

前者将值“ U”与arr [i]的内容进行比较。

后者检查字符串是否引用相同的内容,或更准确地引用对象的相同实例。您可能会想到这一点,因为它们是否指向相同的内存块?在这种情况下,答案是他们没有。