统计一个字符串出现频率最高的字母/数字

本文介绍两种高效方法用于统计给定字符串中出现频率最高的字符。第一种方法使用数组存储字符及其出现次数,并通过遍历找出最高频字符;第二种方法采用对象作为映射,简化计数过程并实时更新最大值,最终返回出现次数最多的字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

js 统计一个字符串出现频率最高的字母/数字

let str = 'asdfg2hjklaqw2ert2yuiopbiaia21bbbb54562102bbbbbbbb0a124a511a22a2a242a1a';
let countRateResult = countRate(str);
console.log("countRateResult", countRateResult)
// 自写的low方法
function countRate(arr) {
	// arr.split('') 如果括号里头是空字符串,将会返回字符串中每个字符的数组形式
	let strArray = arr.split('');
	// let countArr = {};// 也可以存为key-value形式
	let countArr = [];
	strArray.forEach((item, index)=>{
		// countArr[item] = 0;
		countArr[index] = 0
		for(let i=0; i<strArray.length; i++) {
			if (item == strArray[i]) {
				// countArr[item]++;
				countArr[index]++;
			}
		}
	});
	let countArrResultName = strArray[0];// 先让最大值和数为数组第一个
	let countArrResultNum = countArr[0];
	for(let i=0; i<countArr.length; i++) {
		if (countArr[i] > countArrResultNum) {
			countArrResultName = strArray[i];
			countArrResultNum = countArr[i];
		}
	}
	return [countArrResultName, countArrResultNum];
}
复制代码

忘了是哪个网址了,看到个别人写的更好的写法,记录一下

// 方法1
let str = 'asdfghjklaqwertysddfsdewffffffadfsdfeererefdfefuiopiaia';
const strChar = str => {
    let string = [...str],
        maxValue = '',
        obj = {},
		max = 0;
    string.forEach(value => {
        obj[value] = obj[value] == undefined ? 1 : obj[value] + 1;// 亮点
        if (obj[value] > max) {
            max = obj[value]
            maxValue = value
        }
	})
	console.log("obj", obj);
	return maxValue;
}
console.log(strChar(str));
// 方法2
let str = 'safaA890654uasfAJIFj32342HDWEFH3Da23AueUEWda';
let results = {};
let rs = str.split('');

rs.forEach(function(al){
    if(results[al] === undefined){
        results[al] = 1;
    }else{
        results[al]++;
    }
})

let keys = Object.keys(results);
for(let i = 0; i < keys.length; i++){
    console.log(keys[i] + ' : ' + results[keys[i]]);
}
复制代码

转载于:https://juejin.im/post/5c0f6e475188253710580938

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值