js字符串方法 字符串中出现次数最多的字符和出现的次数

简介: 在JavaScript中,字符串是一种常见的数据类型。由于字符串在实际应用中十分常见,所以JavaScript提供了很多字符串方法来方便我们的操作。本篇博客将介绍其中一种常见的需求——查找字符串中出现次数最多的字符和出现的次数。下面是几种不同的实现思路。

在JavaScript中,字符串是一种常见的数据类型。由于字符串在实际应用中十分常见,所以JavaScript提供了很多字符串方法来方便我们的操作。本篇博客将介绍其中一种常见的需求——查找字符串中出现次数最多的字符和出现的次数。下面是几种不同的实现思路。


1.基于对象的实现思路

我们可以定义一个空对象,然后遍历字符串中的每个字符,通过判断对象中是否已经存在该字符,并进行相应的计数操作。最后再遍历一遍对象,找出出现次数最多的字符即可。


const getMaxCount1 = (str) => {
  let json = {};
  for (let i = 0; i < str.length; i++) {
    if (!json[str.charAt(i)]) {
      json[str.charAt(i)] = 1;
    } else {
      json[str.charAt(i)]++;
    }
  }
  let maxCountChar = "";
  let maxCount = 0;
  for (const key in json) {
    if (json[key] > maxCount) {
      maxCount = json[key];
      maxCountChar = key;
    }
  }
  return `出现最多的字符${maxCountChar},出现的次数是${maxCount}`;
};


 2.基于排序和lastIndexOf方法的实现思路

我们可以将字符串转换为数组,对数组进行排序,然后遍历每个字符,使用lastIndexOf方法查找该字符在字符串中最后一次出现的位置,从而得到该字符的出现次数。最后再比较出现次数即可。


const getMaxCount2 = (str) => {
  let maxCountChar = "";
  let maxCount = 0;
  str = str.split("").sort().join("");
  for (let i = 0, j = str.length; i < j; i++) {
    let char = str.charAt(i);
    let charCount = str.lastIndexOf(char) - i + 1;
    if (charCount > maxCount) {
      maxCount = charCount;
      maxCountChar = char;
    }
    i = str.lastIndexOf(char);
  }
  return `出现最多的字符${maxCountChar},出现的次数是${maxCount}`;
};

3.基于正则表达式的实现思路

我们同样可以将字符串转换为数组,对数组进行排序,然后使用正则表达式匹配出连续出现的字符,并得到它们的出现次数。最后再比较出现次数即可。


const getMaxCount3 = (str) => {
  let maxCountChar = "";
  let maxCount = 0;
  str = str.split("").sort().join("");
  let arr = str.match(/(\w)\1+/g);
  for (let i = 0; i < arr.length; i++) {
    let length = arr[i].length;
    if (length > maxCount) {
      maxCount = length;
      maxCountChar = arr[i][0];
    }
  }
  return `出现最多的字符${maxCountChar},出现的次数是${maxCount}`;
};

4.基于replace方法的实现思路

我们可以使用字符串的replace方法,将字符串中的某个字符替换为空字符串,然后计算字符串长度的变化来得到该字符的出现次数。最后再比较出现次数即可。


const getMaxCount4 = (str) => {
  let maxCountChar = "";
  let maxCount = 0;
  while (str) {
    let length = str.length;
    let char = str.charAt(0);
    let reg = new RegExp(char, "g");
    str = str.replace(reg, "");
    let restLength = str.length;
    let charCount = length - restLength;
    if (charCount > maxCount) {
      maxCount = charCount;
      maxCountChar = char;
    }
  }
  return `出现最多的字符${maxCountChar},出现的次数是${maxCount}`;
};

通过以上四种不同的实现思路,我们可以得到字符串中出现次数最多的字符和出现的次数。根据实际需求和场景的不同,可以选择合适的方法来进行实现。


相关文章
|
28天前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
1月前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
2月前
|
缓存 监控 前端开发
JavaScript 实现大文件上传的方法
【10月更文挑战第17天】通过以上步骤和方法,我们可以实现较为可靠和高效的大文件上传功能。当然,具体的实现方式还需要根据实际的应用场景和服务器要求进行调整和优化。
|
26天前
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
121 52
|
1月前
|
JavaScript 前端开发 索引
js中DOM的基础方法
【10月更文挑战第31天】这些DOM基础方法是操作网页文档结构和实现交互效果的重要工具,通过它们可以动态地改变页面的内容、样式和行为,为用户提供丰富的交互体验。
|
1月前
|
缓存 JavaScript UED
js中BOM中的方法
【10月更文挑战第31天】
|
27天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
40 5
|
1月前
|
JavaScript 前端开发 数据处理
模板字符串和普通字符串在浏览器和 Node.js 中的性能表现是否一致?
综上所述,模板字符串和普通字符串在浏览器和 Node.js 中的性能表现既有相似之处,也有不同之处。在实际应用中,需要根据具体的场景和性能需求来选择使用哪种字符串处理方式,以达到最佳的性能和开发效率。
|
28天前
|
JavaScript 前端开发 索引
JavaScript学习第二章--字符串
本文介绍了JavaScript中的字符串处理,包括普通字符串和模板字符串的使用方法及常见字符串操作方法如`charAt`、`concat`、`endsWith`等,适合前端学习者参考。作者是一位热爱前端技术的大一学生,专注于分享实用的编程技巧。
23 2
|
28天前
|
JavaScript 前端开发
js中的bind,call,apply方法的区别以及用法
JavaScript中,`bind`、`call`和`apply`均可改变函数的`this`指向并传递参数。其中,`bind`返回一个新函数,不立即执行;`call`和`apply`则立即执行,且`apply`的参数以数组形式传递。三者在改变`this`指向及传参上功能相似,但在执行时机和参数传递方式上有所区别。
26 1