【问题标题】:How do I count the maximum number of two characters in a array?如何计算数组中两个字符的最大数量?
【发布时间】:2018-11-12 20:50:26
【问题描述】:

我有一个由元素 b 和 r 组成的字符数组,排列为 {'b','b','r','r','b','r'};

我要查找的是这两个字符的最大数量,而不会中断它们的排列。

示例: ar = {'b','b','r','r','b','r'};

输出应该是 4,因为 bb rr 每个都包含两个字符,并且没有 b 与 rr 或 r 与 bb 混合。

这是我想出的:

int i =0;
    int max=0;
    while(i<ar.length){
        char c = ar[i];
        int count = 0;
       while(i<ar.length&&ar[i] ==c){i++;count++;}
       if(i==ar.length)break;
       char n_c = ar[i];
       while(i<ar.length && ar[i]==n_c){i++;count++;}
       if(i==ar.length) break;
       if(count>max) max=count;
    }

【问题讨论】:

标签: java arrays char


【解决方案1】:

如果您想找到仅包含连续rb 的最大子数组长度,这里有一个解决方案。基本思想是使用两个光标和贪婪搜索。

public static int findMaximum(char[] input) {
    int result = 0;
    int first = 0;
    int second = 0;
    while (input[first] == input[second]) {
        second++; // the second index should start from another character
    }
    while (second < input.length) {
        int preSecond = second; // copy second, in need reset first to it
        while (second + 1 < input.length && input[second] == input[second + 1]) {
            second++; // increment second
        }
        result = Math.max(result, second - first + 1);
        if (second < input.length - 1) {
            first = preSecond;
        }
        second++;
    }
    return result;
}

一些测试用例:

public static void main(String[] args) {
    System.out.println(findMaximum(new char[]{'b','b','r'})); //3
    System.out.println(findMaximum(new char[]{'b','b','r','r'})); //4
    System.out.println(findMaximum(new char[]{'b','b','r','r','r','b','r'})); //5
    System.out.println(findMaximum(new char[]{'b','b','b','r','r','b','r'})); //5
    System.out.println(findMaximum(new char[]{'b','b','r','r','b','r','r','r','r','r'})); //6
}

【讨论】:

  • 这很有帮助!
猜你喜欢
  • 1970-01-01
  • 2017-09-06
  • 2021-07-22
  • 2011-08-28
  • 2023-03-24
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多