嗨,我一直在做Javabat练习,我发现自己在这个问题上遇到了一些麻烦:
如果对于字符串中的所有'x‘字符,在字符串后面的某个地方存在'y’字符,我们会说字符串是xy平衡的。因此,"xxy“是平衡的,而"xyx”则不是。一个'y‘可以平衡多个’x‘。如果给定的字符串是xy平衡的,则返回true。
xyBalance("aaxbby") → true
xyBalance("aaxbb") → false
xyBalance("yaaxbb") → falsepublic boolean xyBalance(String str) {
if(str.length() < 2){
if(str == "x"){
return false;
}
return true;
}
for (int i = 0 ; i < str.length()- 1;i++){
if (str.charAt(i)=='x' && str.charAt(i + 1) == 'y'){
return true;
}
}
return false;
}发布于 2011-08-17 13:25:11
找到最后一个x
y
xPos < yPos.的位置
(我将保留特殊情况,例如如果没有发现x或y作为另一个练习;)
发布于 2011-08-17 13:24:31
一旦您的方法找到一个'x',然后在给定字符串中紧接着一个'y',它就会返回true。所以在大多数情况下,它会给你原来的问题带来不正确的结果。
我没有给你完整的解决方案,只是一个提示,这样你才能真正学会自己解决问题。基本上,您需要确定在最后一次出现'y'之后字符串中是否存在一个'x'。为此,请使用String.lastIndexOf。
发布于 2011-08-17 13:29:46
你的逻辑是有缺陷的:当你发现一个x直接跟在y后面的时候,你就返回true (即结束循环并给出结果),这不是程序应该做的。
此外,如果字符串长度大于2,则将字符串与==进行比较。这将比较引用(指针)而不是字符串的内容。使用s1.equals(s2)比较两个字符串的内容。
下面是我编写算法的方法(使用indexOf的其他解决方案可能更高效,但它们不使用循环。如果您想继续使用循环,这个解决方案应该有效)。
balanced初始化为trueH 110循环结束后返回平衡值。H 211<代码>F 212
https://stackoverflow.com/questions/7093565
复制相似问题