【问题标题】:Counting substrings recursively递归计算子串
【发布时间】:2018-01-27 15:06:37
【问题描述】:

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

示例: 给定一个字符串和一个非空子字符串 sub,递归计算 sub 在字符串中出现的次数,且子字符串不重叠。

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

【问题讨论】:

  • 欢迎来到 Stack Overflow!请take the tour 了解该网站的运作方式以及此处的主题问题,并相应地编辑您的问题。另见:Why is "Can someone help me?" not an actual question?
  • 对我来说这看起来像编码蝙蝠。请自己练习,然后带着真正的问题或问题回来。
  • 您能展示一下您尝试了什么以及出了什么问题吗?根据此处提供的信息,很难确切地知道您需要什么样的帮助 - 如果我们可以看到您到目前为止所做的尝试,那么提供适当的指导会容易得多。另请参阅 minimal reproducible example 了解有关要包含哪些代码的信息。
  • 离题..请先向我们展示您尝试执行的代码
  • 这是我试过的,但没有奏效: public int strCount(String str, String sub) { if(str == null || str.length() == 0 || str. indexOf(sub) == -1) 返回 0; if(str.indexOf(sub) != ) str = str.replace(sub,"");返回 1+strCount(str,sub); }

标签: java recursion substring


【解决方案1】:

方法很简单:

  • 如果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

【讨论】:

  • 谢谢!而已。它对我不起作用,因为我使用了“替换”。我不知道有一个“replaceFirst”。
  • @amaier 当然,replace() 会删除所有出现的,你只需要一个一个删除,考虑投票或接受答案对你来说没问题;)
【解决方案2】:

我们可以在不更新字符串的情况下计算字符串中子字符串的出现次数(不使用 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;
}

【讨论】:

    【解决方案3】:

    你好 :) 这是我解决这个问题的方法!

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

    【讨论】:

      猜你喜欢
      • 2019-09-03
      • 1970-01-01
      • 2022-01-09
      • 2019-03-10
      • 1970-01-01
      • 2011-01-19
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多