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...什么的),关联数组就是下标为字符串...不知道这样理解对不对~不对请指出哈~
各位大神有什么其他方法不麻烦的话给小白的我学习学习下~(*❦ω❦)

浙公网安备 33010602011771号