【发布时间】:2019-09-30 15:50:45
【问题描述】:
我在hackerRank上做一个问题,问题是:
问题陈述
这里我们必须计算XYZ 人访问的山谷数量。
山谷是低于海平面的一系列连续台阶,从海平面下降开始,到海平面上升结束。
向上一级为U,向下一级为D。我们将以字符串的形式给出XYZ人走过的步数加上上下,即
UUDDUDUDDUU
示例输入
8
UDDDUDUU
样本输出
1
说明
如果我们将 _ 表示为海平面,向上表示为 /,向下表示为 \,则 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;
}
但是我找到了另一个解决方案,但是无论我怎么看,逻辑都和我的一样:
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;
}
那么我在这里缺少什么导致我无法工作的区别是什么? 谢谢。
【问题讨论】:
-
在第二个例子中,他们使用的是
char,所以==是可以的。您正在使用String's,它们是对象。这意味着您必须将它们与.equals进行比较 -
首先,使用
String[] arr = s.toCharArray()而不是String[] arr = s.split("");。我认为它会更有效率。其次,对于你的等级(海平面),在c=='U'时增加,然后检查c=='D'是否减少。 -
查看这个可爱的debug 博客寻求帮助。一组简单的
print语句来跟踪程序操作会指出问题所在。