方式一:利用指针思想(即索引)

在JavaScript中指针思想就是索引思想。
思路:

  • 首先定义ij两个索引,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));
03-05 15:33