给出一个字符串,如果字符串中任何位置的“是”出现次数等于字符串中任何位置的“非”出现次数(区分大小写),则返回true。
public boolean equalIsNot(String str) {
int countis = 0, countNot = 0;
for (int i = 0; i < str.length(); i++) {
if (i < str.length() - 3) {
if (str.substring(i, i + 3).equals("not")) {
countNot++;
}
if (str.substring(i, i + 2).equals("is")) {
countis++;
}
} else {
if (str.substring(i).equals("not")) {
countNot++;
}
if (str.substring(i).contains("is")) {
countis++;
}
}
}
return countis == countNot;
}
在codingBat中,我所有的测试结果均为绿色(真),但最下面的其他测试部分为红色(假)。为什么?我哪一点失败了?
答案 0 :(得分:0)
您的最后一个条件是if (str.substring(i).contains("is")) {
,所有其他条件都使用equals
。如果您输入的是“ notnotisis”,那么您将得到意想不到的结果。因为当您到达最后3个字符时,您进入了if的第二个分支,所以您说“ does'sis'包含'is''”->是,那么“ does'is'包含'is'->是”。简单地说,您在某些情况下会重复计算。
将最后一个contains
更改为equals
。