递归计数子串

时间:2017-08-18 20:55:29

标签: java recursion substring

我正在努力解决一个我不知道如何解决的递归问题。你能暗示一下吗?

实施例: 给定一个字符串和一个非空子字符串子,递归计算子字符串出现的次数,而子字符串不重叠。

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); 
}

3 个答案:

答案 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);
      }

}