我遇到了这个问题:
给出一个字符串,递归计算(无循环),该字符串中小写字母“ 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);
}
}
答案 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;
}