获取字符串中某个字符的最大连续出现次数
字符串NN1N123BNNNN
N的最大连续出现次数为4 NN1N123BNNNN
public static void main(String[] args) {
System.err.println(charMaxSize("NN1N12NNN1NN", 'N'));
}
/**
* 获取字符串某个字符的最长连续字符个数 : NN1N12NNN1NN N的连续最长为3
*/
public static int charMaxSize(String str, char c) {
// 判断字符串是否为空 或者 是否包含 c
if(isEmpty(str) || !str.contains(String.valueOf(c))) {
return 0;
}
int max = 0;
char[] charArray = str.toCharArray();
int size = charArray.length;
for (int i = 0; i < size; i++) {
// 判断当前最大的连续次数是否大于剩余次数, 如果大于剩余次数 或者 当前i大于数组的长度, 则没必要再去循环判断
if(max >= size - i || i >= size) {
return max;
}
// 获取当前第i位起的连续字符数
int charMaxSizeSub = charMaxSizeSub(charArray, c, i, size);
// 当前连续字符串和max进行比较,并赋值给max
max = max > charMaxSizeSub ? max : charMaxSizeSub;
// 对i = i + 连续字符 (连续字符内没必要循环)
i += charMaxSizeSub > 0 ? charMaxSizeSub - 1 : 0;
// 或者这样写(不影响结果),当结束后,那么下一个肯定不符合
// 所以可以多加1
// i += charMaxSizeSub;
}
return max;
}
/**
* 获取从i起的最长连续
*/
private static int charMaxSizeSub(char[] charArray, char c, int start, int length) {
int size = 0;
for (int i = start; i < length; i++) {
// 若求非N连续次数, 则改为 !=c 即可
if(charArray[i] == c) {
size++;
}else {
break;
}
}
return size;
}