字符串最长连续次数 字符串的格式为str = “123453344556565456”,不能有空格或标点字符
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;
}
因为遇到的都是用数字表达的数组 所以这里引用了正则表达式作为判断,将逗号去掉再组成一个字符串,比如4最长连续次数,则如下图
String newString = String.valueOf(sitLyNumber).replaceAll("[^0-9]", "");
//每日最长连续坐卧时长
int sitLie = charMaxSize(newString, '4');