使用Java的备用字符排列

时间:2018-09-18 08:34:01

标签: java string

std::count_if

在这种情况下,计数应为3 ...但应为4

2 个答案:

答案 0 :(得分:0)

递归方法内的for循环没有break语句。休息delete1(str)之后的语句;声明将起作用。

delete1(str);
break;

在使用递归时,您应该知道在哪里中断循环以及Java中的功能流如何发生。

在您的情况下,对于所有长度大于2的子字符串,

将多次调用delete方法。这就是为什么输出为4的原因。

答案 1 :(得分:0)

您的代码有很多错误:

  1. 您在类级别拥有count,并且还让您的方法返回该计数。
  2. 您递归调用后继续循环
  3. 这不是真的错误,但是您的if(str.length() > 1)检查是多余的,因为您的循环已经在[1, length)范围内循环,因此如果长度小于或等于1,则循环将不会开始。

记住以上几点,您可以将其更改为:

class Main {
  public static void main(String[] args){
    String str = "AAAA"; // Expected output: 3
    countChars(str);
    System.out.println(count);
  }

  private static int count = 0;
  private static void countChars(String str){
    int length = str.length();
    for(int i = 1; i < length; i++){
      if(str.charAt(i-1) == str.charAt(i)){
        count++;
        String substr = str.substring(i, length);
        countChars(substr);
        break;
      }
    }
  }
}

按照您的期望,将count放在最后3个位置。

Try it online.

不过,我仍然不确定您要完成的工作。例如,AAAABABBABABAAAAABBABA的预期输出是什么?另外,如果计数不是静态的类级字段,那会更好,这样可以更容易地重用。