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}`;
};

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


相关文章
|
3月前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
3月前
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
304 62
|
3月前
|
JavaScript 前端开发 数据处理
模板字符串和普通字符串在浏览器和 Node.js 中的性能表现是否一致?
综上所述,模板字符串和普通字符串在浏览器和 Node.js 中的性能表现既有相似之处,也有不同之处。在实际应用中,需要根据具体的场景和性能需求来选择使用哪种字符串处理方式,以达到最佳的性能和开发效率。
124 63
|
1月前
|
JavaScript 前端开发 开发者
JavaScript字符串的常用方法
在JavaScript中,字符串处理是一个非常常见的任务。JavaScript提供了丰富的字符串操作方法,使开发者能够高效地处理和操作字符串。本文将详细介绍JavaScript字符串的常用方法,并提供示例代码以便更好地理解和应用这些方法。
56 13
|
3月前
|
JavaScript 前端开发 索引
js中DOM的基础方法
【10月更文挑战第31天】这些DOM基础方法是操作网页文档结构和实现交互效果的重要工具,通过它们可以动态地改变页面的内容、样式和行为,为用户提供丰富的交互体验。
|
3月前
|
缓存 JavaScript UED
js中BOM中的方法
【10月更文挑战第31天】
|
3月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
87 5
|
3月前
|
JavaScript 前端开发 索引
JavaScript学习第二章--字符串
本文介绍了JavaScript中的字符串处理,包括普通字符串和模板字符串的使用方法及常见字符串操作方法如`charAt`、`concat`、`endsWith`等,适合前端学习者参考。作者是一位热爱前端技术的大一学生,专注于分享实用的编程技巧。
45 2
|
3月前
|
JavaScript 前端开发
js中的bind,call,apply方法的区别以及用法
JavaScript中,`bind`、`call`和`apply`均可改变函数的`this`指向并传递参数。其中,`bind`返回一个新函数,不立即执行;`call`和`apply`则立即执行,且`apply`的参数以数组形式传递。三者在改变`this`指向及传参上功能相似,但在执行时机和参数传递方式上有所区别。
45 1
|
3月前
|
JavaScript 前端开发
.js方法参数argument
【10月更文挑战第26天】`arguments` 对象为JavaScript函数提供了一种灵活处理参数的方式,能够满足各种不同的参数传递和处理需求,在实际开发中具有广泛的应用价值。
80 7

热门文章

最新文章

  • 1
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    24
  • 2
    Node.js 中实现多任务下载的并发控制策略
    32
  • 3
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    25
  • 4
    【JavaScript】深入理解 let、var 和 const
    48
  • 5
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    44
  • 6
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    53
  • 7
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    55
  • 8
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    71
  • 9
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    55
  • 10
    JavaWeb JavaScript ③ JS的流程控制和函数
    62