从java中的单个字符串中计算连续字符的出现次数?

时间:2018-05-18 07:14:54

标签: java arrays string

我有一个字符串

 String alpha="AAAABBCCCDAA";

我需要在这个字符串中进行一些处理并计算每个字符,并且应该产生像

这样的结果
 4A2B3C1D2A

我的代码工作正常,但计算A整体不计算最后一个A

    String text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    String alpha = "AAAABBCCCDAA";

    for (char a : text.toCharArray()) {
        int counter = 0;
        for (char b : alpha.toCharArray()) {
            if (a == b)
                counter++;
        }

        if (counter != 0) {

            System.out.print(counter);
            System.out.print(a);
        }

结果是:6A2B3C1D

我应该在代码中加入什么样的逻辑和想法?

1 个答案:

答案 0 :(得分:0)

您不需要使用嵌套循环来满足这种简单的要求, 由于你必须找到连续的字符,你可以用 O(n)时间复杂度来实现这一点。

  public static void printOccurrences( String str )
  {
    int len = str.length();
    char[] arr = str.toCharArray();
    char contChar = arr[0];
    int count = 0;
    StringBuffer sb = new StringBuffer();
    for( int i = 0; i < arr.length; i++ )
    {
      if( contChar == arr[i] )
      {
        count++;

        // this below condition helps you to add that last A missed frequency
        if( i + 1 >= arr.length )
        { // Since after this iteration loop will not enter the else block
          sb.append( count ).append( contChar );
        }
      }
      else
      {
        sb.append( count ).append( contChar );
        contChar = arr[i];
        count = 0;
        i--;
      }
    }
    System.out.println( sb.toString() );
  }

   printOccurrences("AAAABBCCCDAA"); // Input

您的输出 4A2B3C1D2A

完成计划:https://ideone.com/eh5eQy