前端提高篇(九)练习3:字符串中出现次数最多的字符
程序员文章站
2024-01-04 20:41:22
...
步骤:
1.计算每个字符出现的次数
2.遍历出现次数,找到次数最多的
我的版本:
<script>
var mystr = 'asdfghjasdfgasdfasdaaa';
function findMax(mystr){
var res = {};
for (var i = 0; i < mystr.length; i++){
if (!res.hasOwnProperty(mystr[i])){
res[mystr[i]] = 1;
}
else {
res[mystr[i]] += 1;
}
}
console.log(res);
var temp = {};
temp[mystr[0]] = res[mystr[0]];
var name = mystr[0];
for(let key in res){
if (res[key] > temp[name]){
delete temp[name];
temp[key] = res[key];
name = key;
}
}
console.log('temp',temp);
}
findMax(mystr);
</script>
js中的{}是对象,不是字典,且不能用方括号:[索引]来访问第n个属性名和值,
于是我单独定义一个变量name保存当前次数较大的属性名(或初始值),用于if判断时调用temp中的key和值、删除temp中的内容
答案版本:
<script>
var mystr = 'asdfghjasdfgasdfasdaaa';
function func(mystr){
var res = {};
for (var i = 0; i < mystr.length; i++){
if (!res[mystr[i]]){
res[mystr[i]] = 1;
}
else {
res[mystr[i]] += 1;
}
}
console.log(res);
var maxName;
var maxValue = -1;
for(key in res){
if ( maxValue < res[key]){
maxValue = res[key];
maxName = key;
}
}
console.log('maxName=' + maxName+' maxValue='+maxValue);
}
</script>
1.没有使用hasOwnProperty()函数,直接使用隐式转换,转换成布尔值做条件判断
2.比较统计的次数时,分别定义了次数最多的字符的名和值,并且将值预设为-1,比较起来更简单,方便