乐趣区

关于javascript: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));
退出移动版