You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归统计字符串中子串出现次数带空格返回错误如何解决

问题解决方法

现有代码的核心问题

  • 递归截断步长错误:每次递归仅将字符串截断n2-1位,会跳过大部分可能的匹配位置,带空格的句子中目标单词间隔分布,因此只会匹配到第一个符合条件的子串,最终返回结果恒为1
  • 缺少独立单词校验:现有逻辑仅匹配连续字符子串,无法区分独立单词和包含目标串的其他词汇(例如匹配need时会把needs也计入统计),不符合需求要求
  • 方法名存在拼写错误:原countSubstrig缺少字母n

修正后实现代码

// 对外调用入口,提前做单词边界预处理
static int countWord(String sentence, String word) {
    // 给句子和目标单词前后各加空格,统一边界规则,无需单独判断首尾场景
    return countSubstring(" " + sentence + " ", " " + word + " ");
}

static int countSubstring(String str1, String str2) {
    int n1 = str1.length();
    int n2 = str2.length();

    if (n1 < n2) {
        return 0;
    }

    if (str1.substring(0, n2).equals(str2)) {
        // 匹配成功后跳过整个目标单词长度,避免重复统计
        return countSubstring(str1.substring(n2), str2) + 1;
    }
    // 未匹配成功仅往后挪1位,不会漏过可能的匹配位置
    return countSubstring(str1.substring(1), str2);
}

public static void main(String args[]) {
    // 测试带空格的句子场景
    String str1 = "i just need for need test",
            str2 = "need";
    System.out.println(countWord(str1, str2)); // 输出2,符合预期
}

改动说明

  • 新增countWord入口方法,通过前后补空格的方式统一独立单词的匹配规则,无需额外处理字符串首尾的边界判断逻辑
  • 修正递归步长逻辑,未匹配时每次仅向后滑动1位,不会跳过潜在匹配位置
  • 匹配成功后直接跳过整个目标单词的长度,避免出现重复统计的问题
  • 修正了原方法名的拼写错误

内容的提问来源于stack exchange,提问作者ninoprovezano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:06:04