【问题标题】:count the occurrence of successive character from a String of single word in java?计算java中单个单词字符串中连续字符的出现?
【发布时间】:2018-05-18 07:14:54
【问题描述】:

我有一个字符串

 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

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

【问题讨论】:

  • 如果 a !=b,停止循环?
  • 您应该采用不同的方法,遍历您的alpha,然后执行一个简单的 3 步算法:1.) 获取当前字符。 2.) 继续循环,直到遇到不同的字符。记下出现的次数。 3.)将计数器+字符添加到您的输出中。冲洗并重复,直到您到达alpha的末尾

标签: java arrays string


【解决方案1】:

对于这个简单的要求,您不需要使用嵌套循环, 由于您只需要找到连续的字符,因此您可以在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多