我在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;
}
那么我在这里错过了什么导致我的行不通的区别? 谢谢。
答案 0 :(得分:1)
在Java中,您需要执行以下操作以比较字符串值:
if("U".equals (arr[i])) {
不是这个:
if(arr[i] == "U") {
前者将值“ U”与arr [i]的内容进行比较。
后者检查字符串是否引用相同的内容,或更准确地引用对象的相同实例。您可能会想到这一点,因为它们是否指向相同的内存块?在这种情况下,答案是他们没有。