需要:应用js获取aaaabcc4aa4ddcfceeeeeeeggg
这个字符串中间断呈现次数最多的字符
形式一:利用指针思维(即索引)
在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));