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