我试图对此进行编码,但我没有得到预期的结果:
给定一个字符串,递归计算(无循环)小写的数字' x'字符串中的字符。
public int countX(String str) {
int count = 0;
if(str.length() >= 1 ) {
if(str.substring(0, 1).equals("x")) {
str = str.substring(1, str.length());
count = count + 1 + countX(str);
}
}
else {
str = str.substring(1, str.length());
count = count + countX(str);
}
return count;
}
这是我的方法:
key=value
答案 0 :(得分:1)
假设你有一个字符串" axbxcx"。下面的代码只查看字符串中的第一个字符,并确定它是否为x。如果是这样,那么除了在字符串的其余部分中找到的x的数量之外,还返回1。如果第一个字符不是x,那么字符串中x的数量等于字符串中不包括第一个字符的x的数量,这就是返回的内容。
int count(String s)
{
if (s.length() == 0) // base case
{
return 0;
}
if (s.charAt(0) == 'x')
{
return 1 + count(s.substring(1));
}
else
{
return count(s.substring(1));
}
}
答案 1 :(得分:1)
你有正确的想法,但我认为你复杂的事情。只需明确检查第一个字符是否为x
(如您所示),在这种情况下只增加count
。 无论是否为,是否继续递归:
public static int countX(String str) {
int count = 0;
if (str.length() > 0) {
if (str.substring(0, 1).equals("x")) {
++count;
}
str = str.substring(1, str.length());
count += countX(str);
}
return count;
}
答案 2 :(得分:0)
你应该尝试这个(假设你在方法之外测试初始str值不为null并且长度大于0)。
public int countX(String str) {
if ( str.length() == 1 ) {
return ("x".equalsTo(str) ? 1 : 0);
} else {
return (str.charAt(0) =='x' ? 1 : 0) + countX(str.substring(1,str.length())
}
}
答案 3 :(得分:0)
这个怎么样?
public static int countX(String str) {
if (str.length() == 0) {
return 0;
}
if (str.substring(0, 1).equals("x")) {
return 1 + countX(str.substring(1));
}
return countX(str.substring(1));
}
答案 4 :(得分:0)
这是一种简单的方法。
首先,检查字符串是否为空。这是递归的终止条件。
然后您的结果只是第一个字符(1
或0
)的计数,添加到字符串其余部分的计数中(通过调用substring(1)
上的函数计算得出)。
public static int countX(String str) {
if (str.isEmpty()) {
return 0;
}
return (str.charAt(0)=='x' ? 1 : 0) + countX(str.substring(1));
}
答案 5 :(得分:0)
您可以尝试以下一种方法:
public int countX(String str) {
int end = str.length(); //get length of the string
int counter = 0;
if(str.length()==0){
return counter; //recursion will stop here
}else{
if(str.charAt(end-1) == 'x'){
counter++;
}
end--;
str=str.substring(0,end); //your string will perform a decrease in length and the last char will be removed
}
return counter+countX(str);
}