如何计算数组中两个字符的最大数量?

时间:2018-06-03 09:33:47

标签: java arrays char

我有一个字符数组,由元素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;
    }

1 个答案:

答案 0 :(得分:0)

如果要查找仅包含连续> ([datetime]"2018-06-03T12:22:23").ToString("dd-MM-yyyy HH:mm") 03-06-2018 12:22 r的最大子数组长度,这是一个解决方案。基本思想是使用两个光标和贪婪搜索。

b

一些测试用例:

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;
}