java为什么我的代码在以下条件下返回false?
我正在写代码。com练习。我对此练习有问题: 如果字符串中的所有“x”字符后面都有一个“y”字符,那么我们就说字符串是xy平衡的。所以“xxy”是平衡的,但“xyx”不是。一个“y”可以平衡多个“x”。如果给定字符串是xy平衡的,则返回true
xyBalance("aaxbby") → true
xyBalance("aaxbb") → false
xyBalance("yaaxbb") → false
我知道正确的解决方案,但我很好奇为什么以下解决方案不起作用:
public boolean xyBalance(String str) {
for(int i = 0; i < str.length() -1 ;i++) {
if(str.indexOf("x") == -1 ) {
return true;
}
else if(str.charAt(str.length()-1) == 'x') {
return false;
}
else if (str.indexOf("x",i) < str.indexOf("y",i)) {
return true;
}
}
return false;
}
此代码适用于除两种示例情况外的所有情况:
xyBalance("y") → true **my code returns false**
xyBalance("") → true **my code returns false**
有人能解释一下原因吗?谢谢你=]
# 1 楼答案
对于字符串
"y"
,您得到错误结果的原因是for循环中的条件是运行到i < str.length() -1
,修复程序会将该条件更改为运行到:i < str.length()
,这样您就不会错过最后一个字符至于在空字符串上运行代码,由于字符串的长度为零,它根本不会进入for循环,因此将返回
false
-因此这实际上是一个好结果# 2 楼答案
如果传递的
String
为空,则不会进入循环,因此该方法会自动返回false
。循环以i = 0
开始,尝试匹配条件i < str.length() - 1
,其中str.length() - 1
的值为-1,因为String
为空并自动中止无论如何,这段代码都浪费了相当多的计算能力。有一个简单得多的解决方案:
这个问题可以转化为
这使得整个问题变得简单得多: