递归统计字符串中子串出现次数带空格返回错误如何解决
问题解决方法
现有代码的核心问题
- 递归截断步长错误:每次递归仅将字符串截断
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
相关产品推荐
相关产品推荐

