JavaScript 求字符串中出现次数最多的字母及次数

194 阅读2分钟

一、使用对象方式求解

  1. 基本思路
  • 首先拿到的是字符串,需要先转变为字符数组,方便后续遍历;
  • 遍历转变后的字符数组,依次将字符存入到新建的对象中;
  • 放的规则是:字符作为键,当对象中存在这个键,就将值加一反之加入这个键,将其值设置为1
  • 遍历对象,取出键值的最大值
  • 遍历对象,找出键值最大的对应的键输出即可;
  1. 代码实现
function cal(str) {
    //新建空对象
    let obj = {};
    //将字符串转变为字符数组
    let arr = [...str];
    //遍历字符串数组,按照规则放到对象中
    for (let i = 0; i < arr.length; i++) {
        if (obj[arr[i]]) {
            obj[arr[i]]++;
        } else {
            obj[arr[i]] = 1;
        }
    }
    let max = 0;
    //使用for in遍历找到键值的最大值
    for (const value in obj) {
        if (obj[value] > max) {
            max = obj[value];
        }
    }
    //重新遍历 找到最大键值对应的键,并输出
    for (const value in obj) {
        if (obj[value] === max) {
            console.log(value);
            console.log(obj[value]);
        }
    }
}
cal("vhsuhvusvusgv");

二、使用ES6新增的map数据结构(基本思路一致,主要是熟悉map的操作)

  1. 基本思路
  • 首先拿到的是字符串,需要先转变为字符数组,方便后续遍历;
  • 遍历转变后的字符数组,依次将字符存入到新建的map对象中;
  • 放的规则是:字符作为键,当对象中存在这个键,就将值加一反之加入这个键,将其值设置为1
  • 遍历map对象,取出键值的最大值
  • 遍历map对象,找出键值最大的对应的键输出即可;
  1. 代码实现
function cal(str) {
    //将字符串转换成字符数组
    let arr = [...str];
    //新建map结构
    let myMap = new Map();
    //按照规则存放数据到map结构中
    for (let i = 0; i < arr.length; i++) {
        if (myMap.has(arr[i])) {
            myMap.set(arr[i], myMap.get(arr[i]) + 1)
        } else {
            myMap.set(arr[i], 1);
        }
    }
    let max = 0;
    //找出现最多的次数为多少 注意这里是for of 且遍历的就是键值(使用的values())
    for (const value of myMap.values()) {
        if (value > max) {
            max = value;
        }
    }
    //遍历map结构(使用的是entries()),注意这里返回的是数组
    console.log(max);
    for (const value of myMap.entries()) {
        if (value[1] === max) {
            console.log(value[0]);
        }
    }
}
cal("vhsuhvusvusgv");