Skip to content

Latest commit

 

History

History
51 lines (38 loc) · 1.19 KB

统计字符串中出现最多的字母和个数.md

File metadata and controls

51 lines (38 loc) · 1.19 KB

统计字符串中出现最多的字母和个数

这估计是很多小公司会考的一道题吧。下面提供两种解决方法。

  • 循环(任何一种循环方式)
  • 正则

通常,最快想到的就是遍历进行判断:

let str = '111234441asdsadawerzxxss'
let char = ''
let count = 0

const num = str.split('').reduce((acc, cur) => {
  if (acc[cur]) acc[cur]++
  else acc[cur] = 1
  return acc
}, {})

for (let [key, value] of Object.entries(num)) {
  if (value > count) {
    count = value
    char = key
  }
}

console.log(`字符最多的是 ${char},出现了 ${count} 次`)

然而,通过正则可以用更少的代码实现:

// 先排序
str = str.split('').sort().join('') // "aaabbbbbcccccccc"

let re = /(\w)\1+/g
str.replace(re, ($0, $1) => {
  if (count < $0.length) {
    count = $0.length
    char = $1
  }
})

console.log(`字符最多的是 ${char},出现了 ${count} 次`)

这里主要理解正则的意思:

  • (\w)\w 表示匹配字母(大小写)、数字、下划线,放在小括号 () 中表示一个 group,后面可以用 \n(n=1-9) 引用
  • \1 表示第一个 group,即 (\w)\1+ 表示前面的 group 重复 1 到多次