需要:应用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));
发表回复