问题:var str = ‘ssjadsddddddas’,任意字符串,找出出现次数最多的字符及其次数
思路:要判断字符串中字符出现的次数,自然就会想到对象的形式({字符:次数}),那首先把字符串改成key:value的格式,然后再针对key的值做判断,以下2个方法思路一致(方法不同)
方法一:
1.把字符串转成数组
2.通过数组的map方法,借助对象,得到obj的结果
3.计算obj的value的平均值,循环每一个value与平均值进行比对
let str = 'ssjadsdaqweqsddddddas';
// 定义一个空对象
var obj = {};
// 所有字符出现次数之和
let total = str.length;
// 共有多少个字符(不重复)
let count = 0;
// 出现次数的平均数
let average = 0;
//步骤1: 初始obj的结果为:{s: 5, j: 1, a: 3, d: 8, q: 2, s: 5, w: 1}
let strArr = str.split('');
strArr.map(el => {
if (obj[el]) {
obj[el] = obj[el] + 1
} else {
obj[el] = 1
}
})
// 步骤2:通过当前obj得出count
for (let key in obj) {
count++
}
// 步骤3:计算平均数
function cul(){
average = Math.round(total / count);
}
// 步骤4:与平均数进行对比
function compare() {
if (count < 2) {
console.log(obj);
return;
}
for (let key in obj) {
if (obj[key] < average) {
total = total - obj[key]
count--;
cul();
delete obj[key];
compare()
}
}
}
cul();
compare();
方法二:
1.通过charAt方法,借助对象,得到obj的结果
2.先定义count=1,每当value比count大则覆盖,最后得出最大值
let str = 'ssjadsdaqweqsddddddas';
// 定义一个空对象
var obj = {}
// 定义出现最多次数的key
let key = '';
// 定义出现最多次数的值
let count = 1;
// 步骤1:初始obj的结果为:{s: 5, j: 1, a: 3, d: 8, q: 2, s: 5, w: 1}
for (let i = 0; i < str.length; i++) {
var item = str.charAt(i);
if (obj[item]) {
obj[item] += 1;
} else {
obj[item] = 1;
}
}
// 步骤2:把每次找到的最大值赋给变量
for (var k in obj) {
if (obj[k] >= count) {
key = k;
count = obj[k];
}
}
console.log(key + ':' + count);