需求:使用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));