【问题标题】:counting special characters with recursion用递归计算特殊字符
【发布时间】:2018-08-02 14:46:33
【问题描述】:

我正在尝试编写此代码,但没有得到预期的结果: 给定一个字符串,递归(无循环)计算字符串中小写“x”字符的数量。 countX("xxhixx") → 4 countX("xhixhix") → 3 countX("hi") → 0

这是我的方法:

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;
}

【问题讨论】:

  • 你的缩进怎么了?
  • 发布的代码甚至无法编译。右花括号的数量大于左花括号的数量。
  • 我在一个网站上编码,他们不允许我点击“标签”。对此感到抱歉。

标签: java recursion counting


【解决方案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;
}

【讨论】:

  • 这个完美。谢谢。抱歉,我还没有投票权。
  • @DigitalMan 乐于提供帮助。请注意,如果这是正确答案,无论您的声誉如何,您都可以接受它(通过单击答案分数下方的“检查”符号)。
【解决方案2】:

假设您有一个字符串“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));
    }
}

【讨论】:

    【解决方案3】:

    这个怎么样?

    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】:

      你应该试试这个(它假设你在方法之外测试初始 str 值不为空并且长度大于 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())
            }
      
         }
      

      【讨论】:

        【解决方案5】:

        这是一个简单的方法。

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

        那么您的结果就是第一个字符(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));
        }
        

        【讨论】:

          【解决方案6】:

          你可以试试这个:

          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);
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-18
            相关资源
            最近更新 更多