js面试之一个字符串中出现次数最多的字符是?出现几次?

最近在找面试题的时候发现了许多有趣的题目,在这里用随笔记录下~

关于“一个字符串中出现次数最多的字符...”这种问题在笔试题中出现的频率还是很高的,我自己也找到了几种方法处理

 1 var str = "helloworld";
 2 //1.将字符串打散为一个字符数组
 3 var chars = str.split("");
 4 //["h","e","l","l","o","w","o","r","l","d"]
 5 //2.将打散的字符数组排序
 6 chars.sort();
 7 //["d","e","h","l","l","l","o","o","r","w"]
 8 //3.将字符数组重新拼接成字符串
 9 str = chars.join("");
10 //"dehllloorw"
11 //4.查找出字符串中紧挨的一组相同字母
12 var arr = str.match(/([a-z])\1*/g);
13 //["d","e","h","lll","oo","r","w"]
14 //5.按每组字母的个数降序排列
15 arr.sort(function(a,b){return b.length - a.length;});
16 //["lll","oo","d","e","h","r","w"]
17 var c = arr[0][0];
18 var n = arr[0].length;
19 console.log(`出现次数最多的是${c},共出现${n}次`);

  作为一个程序员,可以说对注释真是又爱又恨了~~~当然,一种解决方法肯定是不能满足我的(#^.^#),下面是我想到的另一种解决方法。

 1 var str = "helloworld";
 2 //定义一个空关联数组
 3 var arr = [];
 4 //遍历字符串中每一个元素
 5 for (var i=0;i<str.length;i++) {
 6     //将key当做字符串数组的当前字母
 7     var key = str[i];
 8     //如果关联数组中没有下标为key的元素
 9     if(arr[key]===undefined){
10         //给关联数组中添加下标为key的元素,初始值为1
11         arr[key] = 1;
12     }else{
13         //如果关联数组中存在下标为key的元素,则将初始值加1
14         arr[key]++;
15     }
16 }
17 var c,n;
18 //遍历关联数组
19 for (var key in arr) {
20     //首次比较,把第一个字母及其个数作为当前数组的最多字母和个数
21     if(c===undefined){
22         c = key;//字母
23         n = arr[key];//个数
24     }else {
25         //让后面每个字母的个数与当前字母个数最多的相比
26         if(arr[key]>n){//如果后面字母的个数比当前字母的个数多
27             c = key;//则把最多个数字母赋值给c
28             n = arr[key];//把最多字母的个数赋值给n
29         }
30     }
31 }
32 console.log(`出现次数最多的字母是${c},共出现${n}次`);

  看到这里,难免想念叨一下关联数组和索引数组的差别:

  笼统的说,索引数组就是下标为序数(就是0...什么的),关联数组就是下标为字符串...不知道这样理解对不对~不对请指出哈~

  各位大神有什么其他方法不麻烦的话给小白的我学习学习下~(*❦ω❦)

posted @ 2018-09-06 19:56  流漪  阅读(208)  评论(0)    收藏  举报