方式一:利用指针思想(即索引)
在JavaScript中指针思想就是索引思想。
思路:
- 首先定义
i
、j
两个索引,i指向第一个字符,j指向i后面的字符 - i不动,j一直向后移动,然后比较i与j指向的字符,如果它俩相等则不管,说明i与j之间的字符是连续的。
- 如果不相等则说明i指向的字符的连续性要断开了,此时就要记录这个字符及该字符出现的次数,并将i等j,j继续向后移动
图片描述:
代码:
var str = 'aaaabcc4aa4ddcfceeeeeeeggg';
function getStrMaxCount1(str){
var resultStr = '';
var resultCount = 0;
var i = 0;
var j = 0;
while(i < str.length){
let strStart = str[i];
// 不相等则说明 strStart 不再连续了
if(strStart != str[++j]){
let count = j - i;
console.log(`字符:${strStart}出现了:${count}次!`);
if(count > resultCount){
resultCount = count;
resultStr = strStart;
}
i = j;
}
}
return {
count: resultCount,
str: resultStr
};
}
// {count: 7, str: 'e'}
console.log(getStrMaxCount1(str));
方式二:用数组存储每次循环的字符
思路:
- 定义一个数组,循环这个字符串,判断当前循环的这个字符与数组中最后一项是否相等
- 如果相等说明该字符与数组中前面的字符是连续的,是连续的则将字符存到数组中。
- 如果不相等,则说明数组中字符的连续性断了,此时就要记录数组中的字符及该字符出现的次数。然后清空数组,并进行下一轮循环
代码:
var str = 'aaaabcc4aa4ddcfceeeeeeeggg';
function getStrMaxCount2(str){
var tempArr = [];
var resultStr = '';
var resultCount = 0;
var i = 0;
while(i < str.length){
let char = str[i];
if(tempArr.length == 0){
tempArr.push(char);
}else if(char == tempArr[tempArr.length - 1]){
tempArr.push(char);
if(i == str.length - 1){
// 循环结束后也要进行判断
let charInArr = tempArr[0];
let count = tempArr.length;
console.log(`字符:${charInArr}出现了:${count}次!`);
if(count > resultCount){
resultCount = count;
resultStr = charInArr;
}
}
}else{
// 如果 char 不等于临时数组中的最后一项,则后面数组中的字符不再连续了
let charInArr = tempArr[0];
let count = tempArr.length;
console.log(`字符:${charInArr}出现了:${count}次!`);
if(count > resultCount){
resultCount = count;
resultStr = charInArr;
}
// 清空数组
tempArr.length = 0;
tempArr.push(char);
}
i++;
}
return {
count: resultCount,
str: resultStr
};
}
// {count: 7, str: 'e'}
console.log(getStrMaxCount2(str));