JavaScript获取一个字符串中字符出现最多的次数和对应的字符

初稿日期:2019-07-01
作者:HConan

方法一

match正则部分注意:

  • \1必须与小括号配合使用,所以有([a-zA-Z]);正则表达式中的小括号 "()" 是代表分组的意思, 如果再其后面出现\1则是代表与第一个小括号中要匹配的内容相同
  • 正则若使用 /([a-zA-Z]+)\1/g/([a-zA-Z])\1+/g 都是不对的,此方式不会匹配单个字符且有严重的个数错误
String.prototype.myMaxCharactor = function myMaxCharactor() {
    // 1. 对字符串进行拆分排序重组
    let ary = this.split('').sort().join('').match(/([a-zA-Z])\1*/g);

    // 2. 判定是否为空串
    if (ary === null) {
        return console.log("请传入非空字符串");
    }
    
    // 3. 将字符串长度按照从大到小的顺序排列
    let arySort = ary.sort((a, b) => b.length - a.length);
    
    let aryMaxLength = [arySort[0]]; // 将数组中第一位(100%最大长度)放入新数组中

    // 4. 判定第一位以后的排序中是否有与第一位长度相同的[最大长度字符出现多次]
    for (let i = 1; i < arySort.length; i++) {
        let maxLength = arySort[0].length;
        if (arySort[i].length == maxLength) {
            aryMaxLength.push(arySort[i]); // 如果有与最大长度相同的放入数组中
        }
    }
    
    console.log("最大长度字符一共有 " + aryMaxLength.length + " 个");
    for (let i = 0; i < aryMaxLength.length; i++) {
        console.log(aryMaxLength[i][0], aryMaxLength[i].length);
    }
}
let str = 'hconansuxunhehui';
str.myMaxCharactor(); // h 3 n 3 u 3

方法二

String.prototype.myMaxCharactor = function myMaxCharactor() {
    let obj = {};
    // 1. 遍历字符串,找到重复项的数量
    for (let i = 0; i < this.length; i++) { // 遍历字符串
        if (!obj[this.charAt(i)]) { // 若字符不存在于obj中,则存入并赋值为1
            obj[this.charAt(i)] = 1;
        } else {
            obj[this.charAt(i)]++; // 若字符存在于obj中,则存入的值自加1
        }
    }
    
    // 2. 遍历obj查找最大值
    let maxLength = 0;
    for (let i in obj) {
        if (obj[i] > maxLength) {
            maxLength = obj[i];
        }
    }
    console.log("最大字符长度是 " + maxLength); // 最大字符长度是 3
    
    // 3. 用最大值再次遍历整个obj,看是否有多个最大值项
    let maxNum = 0;
    for (let i in obj) {
        if (obj[i] == maxLength) {
            maxNum++;
            console.log("最大字符第 " + maxNum + " 是 " + i); 
            // 最大字符第 1 是 h
            // 最大字符第 2 是 n
            // 最大字符第 3 是 u
        }
    }
    console.log("最大字符共有 " + maxNum + " 个"); // 最大字符共有 3 个
}
let str = 'hconansuxunhehui';
str.myMaxCharactor();

你可能感兴趣的:(JavaScript获取一个字符串中字符出现最多的次数和对应的字符)