gpt4 book ai didi

java - 为什么我的代码在以下条件下返回 false?

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:09 26 4
gpt4 key购买 nike

我正在 Codingbat.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**

有人能解释一下为什么吗?谢谢你=]

最佳答案

如果传递了String,则永远不会进入循环。为空,因此该方法自动返回 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');
}

关于java - 为什么我的代码在以下条件下返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41275116/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com