CodingBat equalIsNot

时间:2019-05-19 23:02:01

标签: java

给出一个字符串,如果字符串中任何位置的“是”出现次数等于字符串中任何位置的“非”出现次数(区分大小写),则返回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中,我所有的测试结果均为绿色(真),但最下面的其他测试部分为红色(假)。为什么?我哪一点失败了?

1 个答案:

答案 0 :(得分:0)

您的最后一个条件是if (str.substring(i).contains("is")) {,所有其他条件都使用equals。如果您输入的是“ notnotisis”,那么您将得到意想不到的结果。因为当您到达最后3个字符时,您进入了if的第二个分支,所以您说“ does'sis'包含'is''”->是,那么“ does'is'包含'is'->是”。简单地说,您在某些情况下会重复计算。

将最后一个contains更改为equals