Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何计算数组中两个字符的最大数目?_Java_Arrays_Char - Fatal编程技术网

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

Java 如何计算数组中两个字符的最大数目?,java,arrays,char,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

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

而(i如果您想找到只包含连续的
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;
}

看这是有帮助的!
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
}