使用递归计算字符串中hi的出现

时间:2018-09-03 07:12:25

标签: java recursion

我遇到了这个问题:

  

给出一个字符串,递归计算(无循环),该字符串中小写字母“ hi”出现的次数。

count Hi("xxhixx") = 1   
count Hi("xhixhix") = 2   
count Hi("hi") = 1

我运行我的代码,它可以完美运行,但是还有更好的方法吗? 这是我的代码(提前感谢您):

public  int countHi(String string) {
    int count =0;
    return countHi(string,count);
}

public int countHi(String string, int count) {
    if(string.length()==0)
        return count;
    else {
        if(string.endsWith("hi"))
            count++;

        return countHi(string.substring(0, string.length()-1) , count);
    }
}

3 个答案:

答案 0 :(得分:3)

您不需要count参数,此外,您可以通过删除String的后两个字符(等于“ hi”)来减少递归调用的次数:< / p>

public int countHi(String string) {
    if(string.length() < 2) {
        return 0; // no occurrences of "hi"
    } else {
        if(string.endsWith("hi")) {
            // one occurrence + the occurrences in the substring of the first length-2 chars
            return 1 + countHi(string.substring(0, string.length()-2));
        } else {
            // the occurrences in the substring of the first length-1 chars
            return countHi(string.substring(0, string.length()-1));
        }
    }
}

答案 1 :(得分:0)

如果您不想使用字符串函数,这将是理想的代码。

  static int countRecursively(String string, int strCount, int count) {
    int strLength = string.length();
    if (strCount >= strLength) {
        return count;
    } else {
        if (string.charAt(strCount) == 'h' && (strCount + 1) < strLength && string.charAt(strCount + 1) == 'i') {
            count++;
            return countRecursively(string, strCount + 2, count);
        } else {
            return countRecursively(string, strCount + 1, count);
        }
    }

}

答案 2 :(得分:0)

如果您想在单个函数中执行此操作,请执行以下操作。

public int countHi(String str) {
  int len = str.length();
  if(len < 3)
  {
    if(len > 1 && str.substring(0,2).equals("hi"))
    {
      return 1;
    }
    return 0;
  }
  
  int counter = 0;
  if(str.substring(len - 2,len).equals("hi"))
  {
    counter = 1;
  }
  
  return countHi(str.substring(0,len - 1)) + counter;
}