Java 数谷数

Java 数谷数,java,algorithm,Java,Algorithm,我在hackerRank上遇到了一个问题,问题是: 问题陈述 8 UDDDUDUU 1 在这里,我们必须统计访问人数 山谷是一系列低于海平面的连续台阶,从海平面下降到海平面上升 向上一步是U,向下一步是D。我们将得到人员旅行的步数,加上字符串形式的上下步数,即 UUDDUDUDDUU 样本输入 8 UDDDUDUU 1 样本输出 8 UDDDUDUU 1 解释 如果我们将uu表示为海平面,将上升表示为/,将下降表示为\,则Gary的徒步旅行可以绘制为: _/\ _

我在hackerRank上遇到了一个问题,问题是:

问题陈述

8
UDDDUDUU
1
在这里,我们必须统计访问人数

山谷是一系列低于海平面的连续台阶,从海平面下降到海平面上升

向上一步是
U
,向下一步是
D
。我们将得到人员旅行的步数,加上字符串形式的上下步数,即

UUDDUDUDDUU
样本输入

8
UDDDUDUU
1
样本输出

8
UDDDUDUU
1
解释

如果我们将uu表示为海平面,将上升表示为/,将下降表示为\,则Gary的徒步旅行可以绘制为:

_/\      _
   \    /
    \/\/
他进出一个山谷

我写的代码不起作用

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;
}
那么,我在这里遗漏了什么差异导致我的不起作用呢?
谢谢。

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

if(“U”。等于(arr[i])){
而不是这个:

if(arr[i]=“U”){
前者将值“U”与arr[i]的内容进行比较

后者检查字符串是否引用了相同的内容,或者更准确地说是引用了对象的相同实例。您可以将其视为它们引用了相同的内存块吗?在本例中,答案是它们没有

来回答你问题的另一个方面

为什么会这样:

for(char c:s.toCharArray()){
如果(c=='U')++lvl;
如果(c=‘D’)——lvl;
如果没有:

String[]arr=s.split(“”);

对于(int i=0;ii在第二个示例中,它们使用的是
char
,因此
=
是可以的。您使用的是
String
,它们是对象。这意味着您必须将它们与
进行比较。equals
首先,使用
String[]arr=s.tocharray()
而不是
String[]arr=s.split(“”)
。我认为这样会更有效率。第二,为了你的水平(海平面),当
c=='U'
时增加,然后检查
c=='D'
是否减少。查看这个可爱的博客寻求帮助。一组简单的
print
语句来跟踪程序操作会指出问题。丹尼斯,这对你的问题有帮助吗?如果有,你能接受答案吗?只需点击灰色复选标记nex答案是否定的,谢谢