给定一个字符串,”abcdefabcdefabcdeadfkjafd”,找出出现次数最多的字符

方法一:

把字符串转换成数组,去重,然后统计出字母出现的次数。找出出现次数最多的字母,及其出现次数。最后,查看是否有并列最多存在。

// 方法一:
let str1 = 'abcdefabcdefabcdeadfkjafd'
let arr = str1.split('')
console.log('字符串数组:',arr);
// 1、数组去重
let set1 = new Set(JSON.parse(JSON.stringify(arr)))
let countArr = []
// 2、求出每个不重复的字母的个数
set1.forEach(x=>{
     let count = 0
     arr.forEach(e=>{
         if(e==x){
            count++
         }
     })
})
console.log('统计字母出现次数:',countArr);

// 3、找出出现次数最多的字母,及其出现次数
let maxIndex = 0
for(let i=1;i<countArr.length;i++){
    if(countArr[i].count > countArr[maxIndex].console){
       maxIndex = i
    }
}
console.log('出现次数最多的下标:',maxIndex);

// 4、是否有并列最多存在
let maxCount = []
for(let j=0;j<countArr.length;j++){
    if(countArr[maxIndex].count === countArr[j].count){
        maxCount.push({maxLetter: countArr[j].letter, maxCount: countArr[j].count})
    }
}
console.log('出现次数最多的字母数组',maxCount);
console.log('出现次数最多的字母:');
maxCount.forEach(x => console.log(x.maxLetter))

方法二:

统计字母出现次数,求出现次数最多的字母

let obj = {}
// 1、统计字母出现次数
for (let i = 0; i < str.length; i++) {
    // 此处用到了 in 这个关键字 它的用法就是 查看前者是否在后者中存在       
    if (str[i] in obj) {  //如果str[i]的值存在obj对象中,就加一
       obj[str[i]]++
    } else {  //不存在则置为1
       obj[str[i]] = 1
    }
}
console.log('obj:',obj)
// 2、求出现次数最多的字母
/* 这里我们需要用到一个变量MAX来跟该对象里的值比较 */
let MAX = 0
let MAX_Obj = {}
    
for (let key in obj) {
    if (obj[key] > MAX) {
        MAX = obj[key]
        MAX_Obj = {
             value: key,
             count: MAX
        }
    }
}
console.log(MAX_Obj);

方法三:

数组去重 和计算出现的次数,该对象中是否存在当前字母的键,不存在则将该对象的值置为1

// 方法三:
let str2 = 'abcdefabcdefabcdeadfkjafd'
str2 = str2.split('');
console.log(str2);
let newStr = {};
// 数组去重 和计算出现的次数
str2.forEach( (item)=> {
    if (newStr[item]) {  //该对象中是否存在当前字母的键
        newStr[item]++;
    } else { //不存在则将该对象的值置为1
        newStr[item] = 1;
    }
})
let max=0;
let strkey=null;
for(let key in newStr){
    if(newStr[key]>max){
       max=newStr[key];
       strkey=key;
    }
}
console.log("最多的字符是" + strkey);
console.log("出现的次数是" + max);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值