为什么我的代码在以下情况下返回 false?
Why is my code returning false for the following conditions?
我正在做 Codingbat.com 练习。我在这个练习中遇到了问题:
如果对于字符串中的所有 'x' 个字符,在字符串后面的某处存在一个 'y' 个字符,我们会说一个字符串是 xy 平衡的。所以 "xxy" 是平衡的,但 "xyx" 不是。一个 'y' 可以平衡多个 'x'。 Return 如果给定的字符串是 xy 平衡的,则为真。
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**
谁能解释一下为什么?谢谢你 =]
您得到字符串 "y"
错误结果的原因是 for 循环中的条件是 运行 直到 i < str.length() -1
,修复会改变运行 的条件直到:i < str.length()
这样您就不会错过最后一个字符。
至于运行空字符串上的代码,由于字符串的长度为零,它根本不会进入for循环,因此return false
- 所以这实际上是一个很好的结果!
如果传递的 String
为空,则永远不会进入循环,因此该方法会自动 returns false
。循环以 i = 0
开始,尝试匹配条件 i < str.length() - 1
,其中 str.length() - 1
计算结果为 -1,因为 String
为空并自动中止。
无论哪种方式,此代码都会浪费相当多的计算能力。有一个更简单的解决方案可用:
问题可以转化为
A String
is balanced, if no 'x' occurs after the last 'y' in the String
这让整个问题简单了很多:
public boolean xyBalanced(String s){
return s.lastIndexOf('x') <= s.lastIndexOf('y');
}
我正在做 Codingbat.com 练习。我在这个练习中遇到了问题: 如果对于字符串中的所有 'x' 个字符,在字符串后面的某处存在一个 'y' 个字符,我们会说一个字符串是 xy 平衡的。所以 "xxy" 是平衡的,但 "xyx" 不是。一个 'y' 可以平衡多个 'x'。 Return 如果给定的字符串是 xy 平衡的,则为真。
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**
谁能解释一下为什么?谢谢你 =]
您得到字符串 "y"
错误结果的原因是 for 循环中的条件是 运行 直到 i < str.length() -1
,修复会改变运行 的条件直到:i < str.length()
这样您就不会错过最后一个字符。
至于运行空字符串上的代码,由于字符串的长度为零,它根本不会进入for循环,因此return false
- 所以这实际上是一个很好的结果!
如果传递的 String
为空,则永远不会进入循环,因此该方法会自动 returns false
。循环以 i = 0
开始,尝试匹配条件 i < str.length() - 1
,其中 str.length() - 1
计算结果为 -1,因为 String
为空并自动中止。
无论哪种方式,此代码都会浪费相当多的计算能力。有一个更简单的解决方案可用:
问题可以转化为
A
String
is balanced, if no 'x' occurs after the last 'y' in theString
这让整个问题简单了很多:
public boolean xyBalanced(String s){
return s.lastIndexOf('x') <= s.lastIndexOf('y');
}