js实现统计一个字符串中出现最多的字母的方法总汇

时间: 2018-09-19阅读: 3720标签: 算法

给出一个字符串,统计出现次数最多的字母。比如:“abcdefgahijka”,其中出现最多的是a。下面就介绍实现该算法的方式总结:


方法一

关键方法为 String.prototype.charAt

核心理念为:先遍历字符串中所有字母,统计字母以及对应显示的次数,最后是进行比较获取次数最大的字母。

/**
 * 获取字符串中出现次数最多的字母
 * @param {String} str
 */
function getChar(str) {
    if (typeof str !== 'string') return // 判断参数是否为字符串
    const obj = new Object() // 键为字母,值为次数
    for (let i = 0; i < str.length; i ++) { // 遍历字符串每一个字母
        let char = str.charAt(i) // 当前字母
        obj[char] = obj[char] || 0 // 保证初始值为0
        obj[char] ++ // 次数加1
    }
    let maxChar // 存储字母
    let maxNum = 0 // maxChar字母对应的次数
    for(let key in obj) { // 遍历obj
        if (obj[key] > maxNum) {
            maxChar = key // 比较后存储次数多的字母
            maxNum = obj[key] // 以及它对应的次数
        }
    }
    return maxChar // 返回结果
}

var str = 'aabbbccdd'
console.log('出现次数最多的字母为:' + getChar(str)) 


方法二

关键方法为 String.prototype.split

逻辑和方法一相同,只不过是通过 split 直接把字符串先拆成数组。效率上要比方法一差。

/**
 * 获取字符串中出现次数最多的字母
 * @param {String} str
 */
function getChar(str) {
    if (typeof str !== 'string') return // 判断参数是否为字符串
    const obj = new Object() // 键为字母,值为次数
    const arr = str.split('')
    for (let i = 0; i < arr.length; i++) { // 遍历字符串每一个字母
        let char = arr[i] // 当前字母
        obj[char] = obj[char] || 0 // 保证初始值为0
        obj[char]++ // 次数加1
    }
    let maxChar // 存储字母
    let maxNum = 0 // maxChar字母对应的次数
    for (let key in obj) { // 遍历obj
        if (obj[key] > maxNum) {
            maxChar = key // 比较后存储次数多的字母
            maxNum = obj[key] // 以及它对应的次数
        }
    }
    return maxChar // 返回结果
}
var str = 'aabbbccdd'
console.log(getChar(str))



站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: https://www.fly63.com/article/detial/1092

RSA 背后的算法

随着科技发展,计算能力越来越强,特别是量子计算的兴起,我们对超大质数的位数要求也越来越高,512 bit 的 RSA 已经被破解,而 1024 bit 也已经摇摇欲坠,现阶段 2048 bit 长度还是安全的,可是未来,谁又知道呢?

JavaScript 面试中常见算法问题详解

所谓提升,顾名思义即是 JavaScript 会将所有的声明提升到当前作用域的顶部。这也就意味着我们可以在某个变量声明前就使用该变量,不过虽然 JavaScript 会将声明提升到顶部,但是并不会执行真的初始化过程。

PHP 迁移 Mcrypt 至 OpenSSL 加密算法详解

对称加解密算法中,当前最为安全的是 AES 加密算法(以前应该是是 DES 加密算法),PHP 提供了两个可以用于 AES 加密算法的函数簇:Mcrypt 和 OpenSSL。其中 Mcrypt 在 PHP 7.1.0 中被 Deprecated,在 PHP 7.2.0 中被移除,所以即可起你应该使用 OpenSSL 来实现 AES 的数据加解密。

LZW算法压缩字符串数据

有的时候代码里不得不带上一串长的字符数据表,本来就是小功能,将这种不大不小的数据外部存放显得累赘,放源码里又碍眼又占空间。

js实现将一个正整数分解质因数

js 把一个正整数分解成若干个质数因子的过程称为分解质因数,在计算机方面,我们可以用一个哈希表来存储这个结果。首先,你需要一个判断是否为质数的方法,然后,利用短除法来分解。

js生成guid

全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) 。GUID是一种由算法生成的二进制长度为128位的数字标识符。GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”

JavaScript字符串压缩_js实现字符串压缩

设计一种方法,通过给重复字符计数来进行基本的字符串压缩。例如,字符串 aabcccccaaa 可压缩为 a2b1c5a3 。而如果压缩后的字符数不小于原始的字符数,则返回原始的字符串。 可以假设字符串仅包括a-z的字母

React 中 Virtual DOM 与 Diffing 算法的关系

Virtual DOM 是一种编程理念。UI 信息被特定语言描述并保存到内存中,再通过特定的库,例如 ReactDOM 与真实的 DOM 同步信息。这一过程成为 协调 (Reconciliation)。上述只是 协调算法

用 Javascript 写排序算法

至于为什么选择用 Javascript,则是因为我觉得 Javascript 是最方便运行和调试的,只需要复制代码粘贴到浏览器的控制台就可以了,我为所有的算法附上了测试用例,通过引入 Mocha 就可以在浏览器中显示用例的通过情况

JS数据结构与算法_集合&字典

集合set是一种包含不同元素的数据结构。集合中的元素成为成员。集合的两个最重要特性是:集合中的成员是无序的;集合中不允许相同成员存在,计算机中的集合与数学中集合的概念相同,有一些概念我们必须知晓:

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!