Java 如何计算数组中两个字符的最大数目?
我有一个字符数组,由元素b和r组成,排列为{'b','b','r','r','b','r'} 我想找到的是这两个字符的最大数量,而不中断它们的排列 例如: ar={'b','b','r','r','b','r'} 输出应该是4,因为bb rr每个都包含两个字符,并且没有b与rr或r与bb的混合 这就是我想到的: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
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
}