【问题标题】:CodingBat difference in CodeCodingBat 的代码差异
【发布时间】:2016-01-23 13:17:08
【问题描述】:

所以我很难回答这个问题,http://codingbat.com/prob/p186177

给定一个字符串和一个非空子字符串 sub,递归计算 sub 在字符串中出现的次数,且子字符串不重叠。

  • strCount("catcowcat", "cat") → 2
  • strCount("catcowcat", "cow") → 1
  • strCount("catcowcat", "dog") → 0

所以我决定用谷歌搜索答案,研究一下。擦除它并尝试自己。我想出了。

public int strCount(String str, String sub) {
    if(sub.length() > str.length())
        return 0;
    if(str.substring(0,sub.length()).equals(sub))
        return 1 + strCount(str.substring(str.length()),sub);
    return strCount(str.substring(1),sub);
}

答案是:

public int strCount(String str, String sub) {
if (str.length() < sub.length()) return 0;
if (str.substring(0, sub.length()).equals(sub))
    return 1 + strCount(str.substring(sub.length()), sub);
return strCount(str.substring(1), sub);

}

我不知道为什么我在过去 10 分钟内一直在查看差异,也无法理解为什么当我运行我的代码时它只返回 0 或 1 作为答案。有人能找到区别吗?

【问题讨论】:

    标签: java difference


    【解决方案1】:

    strCount 有不同的参数。 (sub.length()), sub);(str.length()),sub);

    为了将来参考,您可以使用Diff 等工具检查文件中的差异。

    【讨论】:

      【解决方案2】:

      如果字符串的开头与sub 匹配,则错误是当您获取子字符串时:您应该从sub.length() 而不是str.length() 开始获取子字符串。

      public static int strCount(String str, String sub) {
          if (sub.length() > str.length())
              return 0;
          if (str.substring(0, sub.length()).equals(sub))
              return 1 + strCount(str.substring(sub.length()), sub); // <-- sub.length() here
          return strCount(str.substring(1), sub);
      }
      

      或者,您可以稍微改进一下逻辑:您可以调用indexOf 来检索字符串具有@ 的第一个索引,而不是一次递增遍历每个字符以查看字符串是否以sub 开头987654327@ 出现。

      这将是一个示例代码:

      public static int strCount(String str, String sub) {
          int index = str.indexOf(sub);
          if (index == -1) return 0;
          return 1 + strCount(str.substring(index + sub.length()), sub);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-03
        • 2023-02-11
        • 2010-10-28
        • 1970-01-01
        • 2012-12-07
        • 1970-01-01
        • 2021-09-07
        相关资源
        最近更新 更多