剖析
问题的意义大抵就是找出每一个字符涌现的次数,然后比较大小。那末每一个字符都应该对应它涌现的次数。既然是一一对应的,那我们就想到用对象的
key
和
value
来贮存字符和其涌现的次数。
具体做法
- 新建一个空对象
obj
- 遍历给定的字符串
- 接下来就是最主要的 把字符作为
key
值,对应次数作为value
添加给obj
。 - 推断
obj
是不是存在当前轮回的字符,有则让value
即次数++
,不然把当前项作为key
添加给obj
。 - 然后是比较次数的大小。
- 这时候我们须要一个变量来贮存
obj
的value
值。 - 声明一个变量
num
,并设置初始值为0
。 - 遍历
obj
,比较其value
值与num
值的大小。大则将其value
值赋给num
,不然num
值稳定,从而找出最大的value
值。 - 这时候我们须要一个数组来贮存与最大的
value
值即num
婚配的key
值。由于如许的key
值能够不止一个,所以用一个数组来贮存。 - 新建一个空数组
keys
。 - 遍历
obj
,推断与num
婚配的key
值,并添加在keys
内。 - 由于
keys
是个数组,须要用join
转换成字符串。 - 末了就能够返回涌现次数最多的字符及次数了。
let str = "http://www.sxqyuming.com";
function word(str){
let obj = {};
let num = 0;
let keys = [];
for(var i=0;i<str.length;i++){
let strs = str[i]
if(!obj[strs]){
obj[strs] = 1;
}else{
obj[strs]++
}
}
for(var i in obj){
if(num<obj[i]){
num = obj[i]
}
}
for(var i in obj){
if(obj[i]==num){
keys.push(i)
}
}
return "涌现次数最多的字符为"+keys.join('和')+",涌现次数为"+num+"次。"
}
console.log(word(str))