需要:应用 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));