我正在努力解决一个我不知道如何解决的递归问题。你能暗示一下吗?
实施例: 给定一个字符串和一个非空子字符串子,递归计算子字符串出现的次数,而子字符串不重叠。
strCount("catcowcat", "cat") → 2
strCount("catcowcat", "cow") → 1
strCount("catcowcat", "dog") → 0
这是给定的方法
public int strCount(String str, String sub) {
//...
}
编辑(来自评论)我尝试过的内容:
public int strCount(String str, String sub) {
if(str == null || str.length() == 0 || str.indexOf(sub) == -1)
return 0;
if(str.indexOf(sub) != )
str = str.replace(sub,"");
return 1+strCount(str,sub);
}
答案 0 :(得分:3)
方式很简单:
如果substring
包含在String
中,请将其删除一次,并说明您找到(return 1 + maybeThereIsMore
}
否则,说你没找到,return 0;
public static int strCount(String str, String sub) {
if (str.contains(sub)) {
return 1 + strCount(str.replaceFirst(sub, ""), sub);
}
return 0;
}
strCount("catcowcat", "cat") → 1+strCount("cowcat", "cat") → 1+1+strCount("cow", "cat") → 2
strCount("catcowcat", "cow") → 1+strCount("catcat", "cow") → 1
strCount("catcowcat", "dog") → 0
注意:该方法可以是static
,因为它不需要您班级的任何实例,只需要parameters
答案 1 :(得分:0)
我们可以计算字符串中子字符串的出现而不更新字符串(没有replaceFirst()方法)。由于字符串在java中是不可变的,因此replaceFirst不会更新字符串,每次都会创建新的字符串。
public static int strCount(String str, String sub) {
return strCount(str, sub, 0);
}
public static int strCount(String str, String sub, int offset){
int index ;
if((index = str.indexOf(sub, offset))>=0){
return strCount(str, sub, index+1)+1;
}
return 0;
}
答案 2 :(得分:0)
你好:)这是我解决这个问题的方法!
public int strCount(String str, String sub) {
if(str.length()==0)return 0;
if(str.length()<sub.length())return 0;
if(str.substring(0,sub.length()).equals(sub)) {
return 1+strCount(str.substring(sub.length(),str.length()),sub);
}
else {
return strCount(str.substring(1,str.length()),sub);
}
}