JS 面试题:统计一个字符串中出现次数最多的字符(详细注释理解版)

313 阅读1分钟

直接上代码

function fn(str){
    let obj = {}; //定义一个新对象,记录key 和 value
  //循环遍历字符串中元素
    for (let i = 0; i < str.length; i++) {
    // charAt()方法,返回指定下标的字符
        let char = str.charAt(i);
    // char 会成为上面空对象 obj 的一个key
    // obj[char] 成为 value
    // 遍历完后,obj[char] 就是字符串对应字符出现的次数
        if (obj[char]) {  //若元素已存在
        obj[char]++; // 次数加1
        } else {
        obj[char] = 1; //若该元素第一次出现,次数记为1
        }
    }
  // 输出的是完整的对象,记录着每一个字符(key)
  // 及其出现的次数(value)
  console.log(obj);

  // 遍历对象,找到出现次数最多的字符的次数
    let max = 0;
    for (let key in obj) {
        if (max < obj[key]) {
        // 把出现最多的次数,比如 5次, 赋值给 max
        max = obj[key]; 
        }
    }

  // 再遍历对象,找到出现次数最多的字符和其次数
    for (let key in obj) {
        if (obj[key] === max) {  //对应最多的字符就是当前的key
        console.log("最多的字符是" + key);
        console.log("出现的次数是" + max);
        }
    }
}

验证

let str = 'hhhhhhello'
fn(str) 

// {h: 6, e: 1, l: 2, o: 1}
// 最多的字符是h
// 出现的次数是6