gpt4 book ai didi

java - codingBat xyzMiddle 在其他测试中失败

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

这是我的任务:给定一个字符串,“xyz”是否出现在字符串的中间?为了定义 middle,我们会说“xyz”左侧和右侧的字符数最多只能相差 1。

使用下面的代码可以看到问题描述和其他用例中的失败here

xyzMiddle("AAxyzBB") → true

xyzMiddle("AxyzBB") → true

xyzMiddle("AxyzBBB") → false

我的解决方案如下。由于我看不到“其他测试”是什么,请帮我找出问题所在。我的方法是检查“y”是否出现在奇数或偶数字符串的中间。

public boolean xyzMiddle(String str) {
if (str.indexOf("xyz") < 0) return false;
int l = str.length();
int m = l / 2;
if (l % 2 != 0) {
if (str.charAt(m) != 'y') return false;
}
else {
if (str.charAt(m) != 'y' && str.charAt(m - 1) != 'y') return false;
}
return true;
}

最佳答案

您的解决方案的问题在于,您只是在有问题的字符串有 奇数 长度

的情况下返回 false

这实际上是不正确的,此任务的传递用例可以通过数学方式划分,如下所示:

1)With xyz present in the middle and there is a string of length x + 1 and x to either the left or right of it.

将字符串xyz的长度设为3,总长度为:

(x) + 3 + (x + 1) = 2x + 4 --->始终偶数 因此,在上面的情况下,我们只需检查 xyz 是否在中间,并相应地返回,这已在您的代码中处理。

2) With xyz present in the middle and there are strings of length x to the left or right of it.

再次将字符串xyz的长度设为3,总长度为:

(x) + 3 + (x) = 2x + 3 --->始终为奇数

因此,根据您在这种情况下返回 true 的解决方案(最后一行代码),您需要过滤掉 length 为奇数xyz 不在中间的情况,如下所示:

if (!(str.substring((m - 1), m + 2).equals("xyz"))) 
return false;

包含此内容后,您的解决方案如下所示:

public boolean xyzMiddle(String str) {
if (str.indexOf("xyz") < 0) return false;
int l = str.length();
int m = l / 2;
if (l % 2 != 0) {
if (!(str.substring((m - 1), m + 2).equals("xyz")))
return false;
}
else {
if (str.charAt(m) != 'y' && str.charAt(m - 1) != 'y') return false;
}
return true;
}

现在它通过了codingBat的所有测试。

关于java - codingBat xyzMiddle 在其他测试中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30346726/

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