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