在字符串

时间:2016-06-02 16:39:39

标签: java string recursion character

这是弗吉尼亚理工大学openDSA互动学习平台中的一个问题:

  

对于function" countChr",写下递归调用的缺失部分。   这个函数应该返回字母" A"   出现在字符串" str"。

int countChr(String str) {
  if (str.length() == 0) {
    return 0;
  }
  int count = 0;
  if (str.substring(0, 1).equals("A")) {
    count = 1;
  }
  return count + <<Missing a Recursive call>>
}

我知道如何以下列方式非递归地找到一个字符:

 public static void main(String [] args) {
      String str ="abdcfghaasdfaadftaxvvaacvbtradcea";
      int count =0;
      for(int n=0; n<= str.length()-1; n++) {
      if(str.charAt(n)== 'a')
          count++;
      }
      System.out.print(count);
  }

我真的不知道如何递归地做同样的事情,特别是遵循问题中给出的确切模式。

3 个答案:

答案 0 :(得分:1)

您必须在方法中再次调用countChr方法,String直到您调用的最后一个字符。所以,如果你这样做:

return count + countChr( str.substring(1) );

这会给你想要的结果。

答案 1 :(得分:1)

要以递归方式获取字母“A&#39;”的出现次数,您需要使用索引1到字符串末尾的子字符串递归调用该函数:

public class Example {

    public static void main(String [] args) {
        String str ="abdcfghaasdfaadftaxvvaacvbtradcea";
        System.out.println(countChr(str));

        String str2 ="abdcfAhaasdAaadftaxvAAAacvbtradcea";
        System.out.println(countChr(str2));
    }

    static int countChr(String str) {
        if (str.length() == 0) {
            return 0;
        }
        int count = 0;
        if (str.substring(0, 1).equals("A")) {
            count = 1;
        }
        return count + countChr(str.substring(1));
    }
}

输出:

0
5

解释这是如何工作的:

  • 首先使用整个String
  • 调用该函数
  • 如果字符串长度为0,则返回0,因为不会出现&#39; A&#39;
  • 将计数器初始化为0,用于计算出现次数。
  • 如果字符串的第一个字符是&#39; A&#39;递增计数器
  • 现在重复这个过程,我们需要使用相同的String调用相同的函数,除非没有第一个字符。我们将这个递归调用的结果添加到计数器,并将其返回。

这个过程可以通过添加一些印刷品来说明:

 int countChr(String str) {
        System.out.println(str);
        if (str.length() == 0) {
            System.out.println("String has length 0, returning 0");
            return 0;
        }
        int count = 0;
        if (str.substring(0, 1).equals("A")) {
            System.out.println("Character is an 'A' adding 1 to the count");
            count = 1;
        }
        return count + countChr(str.substring(1));
}

输出:

abdcfAhaasdAaadftaxvAAAacvbtradcea
bdcfAhaasdAaadftaxvAAAacvbtradcea
dcfAhaasdAaadftaxvAAAacvbtradcea
cfAhaasdAaadftaxvAAAacvbtradcea
fAhaasdAaadftaxvAAAacvbtradcea
AhaasdAaadftaxvAAAacvbtradcea
Character is an 'A' adding 1 to the count
haasdAaadftaxvAAAacvbtradcea
aasdAaadftaxvAAAacvbtradcea
asdAaadftaxvAAAacvbtradcea
sdAaadftaxvAAAacvbtradcea
dAaadftaxvAAAacvbtradcea
AaadftaxvAAAacvbtradcea
Character is an 'A' adding 1 to the count
aadftaxvAAAacvbtradcea
adftaxvAAAacvbtradcea
dftaxvAAAacvbtradcea
ftaxvAAAacvbtradcea
taxvAAAacvbtradcea
axvAAAacvbtradcea
xvAAAacvbtradcea
vAAAacvbtradcea
AAAacvbtradcea
Character is an 'A' adding 1 to the count
AAacvbtradcea
Character is an 'A' adding 1 to the count
Aacvbtradcea
Character is an 'A' adding 1 to the count
acvbtradcea
cvbtradcea
vbtradcea
btradcea
tradcea
radcea
adcea
dcea
cea
ea
a

String has length 0, returning 0

答案 2 :(得分:0)

return count + countChr(str.substring(1, str.length()));

或更紧凑的形式:

return count + countChr(str.substring(1));