用递归计数字母

时间:2017-01-06 03:26:12

标签: java

我正在尝试创建一个程序来计算字符串中出现在两个相同子字符串之间的字符数,
例如:

strDist("cccatcowcatxx", "cat") →return 9,因为cat的两个实例(包括实例本身)之间的字母数为9

public int strDist(String str, String sub) {
    if (str.length() >= sub.length()){//accomodate for the last length of string hat can be equal to sub
      if ((str.substring(0,sub.length())).equals(sub)){
        return sub.length() + strDist(str.substring(sub.length(), str.length()), sub); 
      }
      else if ((str.substring(str.length() - 1, str.length()).equals(sub.substring(sub.length() - 1,sub.length())))){
        return sub.length();//return diff here
      }
      else {
          return (strDist(str.substring(1,str.length()), sub)); 
      }
    }
    return 0;   
}

正确的方法:

public int strDist(String str, String sub) {
    if (str.length() >= sub.length()){
      if ((str.substring(0,sub.length())).equals(sub)){
          if ((str.substring(str.length() - sub.length())).equals(sub)){
              return str.length();
          }
          else{
              return strDist(str.substring(0, str.length()-1), sub);
          }
      }
      else {
          return (strDist(str.substring(1), sub)); 
      }
    }
    return 0;   
}

1 个答案:

答案 0 :(得分:0)

我假设 - 如果我错了,请纠正我 - 如果sub没有发生,结果应为0;如果它出现一次,结果应该是sub的长度;如果它多次出现,结果可能是以sub开头和结尾的最长子字符串的长度。

所以你的外if语句是合理的:只有当字符串足够长时,才搜索sub。接下来,检查字符串是否以sub开头,这也是一个好主意。但是不要从一开始就切断sub。因为如果您从cat中删除catcowcat,则递归调用strDist("cowcat", "cat")将不会返回6(至少它不应该返回)。相反,我建议,看看字符串是否也以sub结尾。如果是,只返回整个字符串的长度。如果没有,请从 end 中删除一个字符并递归调用。

一些提示:您可以str.substring(0,sub.length()).equals(sub)代替str.startsWith(sub)而不是str.substring(1,str.length())。如果您愿意,可以只编写str.substring(1) public int strDist(String str, String sub) { if (str.length() >= sub.length()) { if ((str.substring(0, sub.length())).equals(sub)) { if ((str.substring(str.length() - sub.length())).equals(sub)) { return str.length(); } else { return strDist(str.substring(0, str.length() - 1), sub); } } else { return (strDist(str.substring(1), sub)); } } return 0; } 而不是jQuery(document).ready(function(){ //some logic newFunc(); //logic }); function newFunc(){ //logic } ,这样做也是如此。

编辑:很高兴你得到了它的工作,classic_man。我正在从评论中格式化您的固定/工作代码并将其粘贴在此处以防其他人想要阅读:

<script>