JavaScript获取字符串中连续出现次数最多的字符

需求:使用js获取 aaaabcc4aa4ddcfceeeeeeeggg这个字符串中 连续出现次数最多的字符
方式一:利用指针思想(即索引) 在JavaScript中指针思想就是索引思想。
思路:
  • 首先定义ij两个索引,i指向第一个字符,j指向i后面的字符
  • i不动,j一直向后移动,然后比较i与j指向的字符,如果它俩相等则不管,说明i与j之间的字符是连续的。
  • 如果不相等则说明i指向的字符的连续性要断开了,此时就要记录这个字符及该字符出现的次数,并将i等j,j继续向后移动
图片描述:
JavaScript获取字符串中连续出现次数最多的字符
文章图片

代码:
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));

方式二:用数组存储每次循环的字符 思路:
  • 定义一个数组,循环这个字符串,判断当前循环的这个字符与数组中最后一项是否相等
  • 如果相等说明该字符与数组中前面的字符是连续的,是连续的则将字符存到数组中。
  • 如果不相等,则说明数组中字符的连续性断了,此时就要记录数组中的字符及该字符出现的次数。然后清空数组,并进行下一轮循环
【JavaScript获取字符串中连续出现次数最多的字符】代码:
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));

    推荐阅读