博客 / 詳情

返回

JavaScript獲取字符串中連續出現次數最多的字符

需求:使用js獲取aaaabcc4aa4ddcfceeeeeeeggg這個字符串中連續出現次數最多的字符

方式一:利用指針思想(即索引)

在JavaScript中指針思想就是索引思想。
思路:

  • 首先定義ij兩個索引,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));
user avatar lantianhaijiao 頭像 lvtu 頭像 hightopo 頭像 201926 頭像 lesini 頭像 qianduanlangzi_5881b7a7d77f0 頭像 b_a_r_a_n 頭像 user_p5fejtxs 頭像 yiiouo 頭像 513928731 頭像 bupthly 頭像 jyeontu 頭像
18 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.