用递归计算特殊字符

时间:2015-06-22 20:30:20

标签: java recursion counting

我试图对此进行编码,但我没有得到预期的结果: 给定一个字符串,递归计算(无循环)小写的数字' 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

6 个答案:

答案 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)

这是一种简单的方法。

首先,检查字符串是否为空。这是递归的终止条件。

然后您的结果只是第一个字符(10)的计数,添加到字符串其余部分的计数中(通过调用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);
}