查找字符串中出现最多的字符?

面试中常遇到的一题,查找当前字符串中出现最多的字符,以及次数。下面介绍两种方法:

// 方法一:使用对象
/**
 * 1.遍历字符串,把字符作为对象的key,重复次数为value, 存入对象;
 * 2.遍历对象,根据获得的最大 value 值,获取到对应的字符串 key;
 * 3.输出结果
 */
 function maxStr(str){
  let obj = {};
  let maxNum = 0;
  let maxStr = ''
  for (let i = 0; i < str.length; i++) {
    if (obj[str[i]]) {
      obj[str[i]] +=1
    }else{
      obj[str[i]] = 1;
    }
  }
  for (const key in obj) {
    if (obj[key] > maxNum) {
      maxNum = obj[key]
      maxStr = key
    }
  }
  console.log(`出现最多次字符是${maxStr},次数是${maxNum}`)
}
// 方法二:使用数组&指针
  • 1.将字符串转为数组并排序,使重复字符排在一起;
  • 2.使用指针思想,获得最大重复数和对应的字符数组
  • 3.输出结果
function arrMaxStr(str){
  const arr = str.split('').sort()
  let startIndex = 0;
  let endIndex = 1;
  let maxNum = 0;
  let strArr = [];

  while(endIndex < arr.length){
    if (arr[startIndex] !== arr[endIndex]) {
      const rangeNum = endIndex - startIndex
      if (rangeNum > maxNum) {
        maxNum = rangeNum
        strArr = [arr[startIndex]]
      }else if(rangeNum === maxNum){
        strArr.push(arr[startIndex])
      }
      startIndex = endIndex
    }
    endIndex++
  }

  console.log(`出现最多次字符是${maxStr.join('')},次数是${maxNum}`);
}

欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值