这是我对这种方法的尝试。
计算字符串 str 中非空子字符串 sub 的共现次数 Eg
numOccurances("dogmonkeydog","dog") 将返回 2
numOccurances("dogmonkeydog","mon") 将返回 1
numOccurances("dogmonkeydog","cow") 将返回 0
public static int numOccurrences(String str, String sub) {
int result = 0;
int pos = str.indexOf(sub);
if (pos == -1){
return result;
}
if (sub.length() > str.length()){
return result;
}
if ((str.substring(0, sub.length())).equals(sub)){
result++;
String st = str.substring(pos);
return result + numOccurrences(st, sub); //Line 87
}
else{
String st = str.substring(sub.length());
return result + numOccurrences(st, sub);
}
}
对于结果 > 0 的所有测试,我都失败了
java.lang.StackOverflowError
at java.lang.String.indexOf(String.java:1718)
at java.lang.String.indexOf(String.java:1698)
at eecs2030.lab6.RecursiveTasks.numOccurrences(RecursiveTasks.java:77)
at eecs2030.lab6.RecursiveTasks.numOccurrences(RecursiveTasks.java:87)
我不确定为什么我的代码从未达到其基本情况,任何见解将不胜感激!
这似乎是一项学校作业。所以,我不会直接给你答案。
在下面的片段中,
result++;
String st = str.substring(pos);
return result + numOccurrences(st, sub); //Line 87
你创造的地方st
有问题。如果str
以 中包含的值开头sub
,str
则将等于st
。因此,调用numOccurrences
将与您的原始调用相同,因此您的递归不会终止。
分析str.substring
上面代码段中需要传递的内容。
希望这可以帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句