如何统计字符串中出现最多的字母与个数

栏目: JavaScript · 发布时间: 5年前

内容简介:闲来无事,穷折腾。最近我朋友在找工作,遇到一些面试题,或者遇到一些问题会及时跟我讨论。我则作为他的幕后军师,为他出谋划策。接下来我分享给大家一道简单的面试题。例:写一个函数专门处理这个事情。

闲来无事,穷折腾。最近我朋友在找工作,遇到一些面试题,或者遇到一些问题会及时跟我讨论。我则作为他的幕后军师,为他出谋划策。接下来我分享给大家一道简单的面试题。

题目

统计字符串中出现最多的字母与个数?

分析

1、验证数据是否字符串
2、字符串转换为数组
3、统计字符串出现的次数
复制代码

例:

var str = 'aaaadddddssssgdhssssbbbbbuuuwmopqlsabcfwsqdghgukssuyutsudddddsasss';
复制代码

写一个函数专门处理这个事情。

/**
* 
* 检查字符串中出现次数最多的那个
* 
*/
function maximum(s) {
    //【第一步】验证合法性
   if (typeof s !== 'string') {
       throw ('s is string');
    }
    //【第二步】转换为数组
    var array = s.split("");
    //【第三步】找出最多的字母
    //这一步最关键

}
复制代码

其实最重要的是第三步,看你站在什么样的思路去找对应的字母与其个数。大多数人会选择使用两个循环进行处理。

代码如下:

/**
 * 检查字符串中出现次数最多的那个
 */
function maximum(s) {
  if (typeof s !== "string") {
    throw "s is string";
  }
  var array = s.split(""),
    l = array.length,
    obj = {},
    ismaxObj = {
      max: 0,
      val: ""
    },
    arrayVal = "";
  while (l--) {
    arrayVal = array[l];
    if (!obj[arrayVal]) {
      obj[arrayVal] = [];
    }
    obj[arrayVal].push(arrayVal);
    if (ismaxObj.max != 0) {
      if (obj[arrayVal].length > ismaxObj.max) {
        ismaxObj.max = obj[arrayVal].length;
        ismaxObj.val = array[l];
      }
    } else {
      ismaxObj.max = obj[arrayVal].length;
      ismaxObj.val = arrayVal;
    }
  }
  //console.log(array);
  console.log(ismaxObj);//出现次数最多的字母与次数
  console.log(obj);//数据重组直观看到数据分布
}

maximum(
  "aaaadddddsgdhssssbbbbbuuupqlsabcfwsqdghgukssuyutsudddddsasss,ewfd,null,undefind.?Qzadsdvsf\/\\\\[;ll;,lw"
);
复制代码

结果如图所示:

如何统计字符串中出现最多的字母与个数

追问

如果面试官追问,如何确定最多的字母的第一个位置与最后一个位置? 其实我们在push的时候就可以把这个数据的位置存起来,稍加改动即可求出。

/**
 * 检查字符串中出现次数最多的那个
 */
function maximum(s) {
  if (typeof s !== "string") {
    throw "s is string";
  }
  var array = s.split(""),
    ll = array.length,
    obj = {},
    ismaxObj = {
      max: 0,
      val: ""
    },
    arrayVal = "";
  for (var l=0;l<ll;l++) {
    arrayVal = array[l];
    if (!obj[arrayVal]) {
      obj[arrayVal] = [];
    }
    obj[arrayVal].push(arrayVal+'-'+l);
    if (ismaxObj.max != 0) {
      if (obj[arrayVal].length > ismaxObj.max) {
        ismaxObj.max = obj[arrayVal].length;
        ismaxObj.val = array[l];
      }
    } else {
      ismaxObj.max = obj[arrayVal].length;
      ismaxObj.val = arrayVal;
    }
  }
  console.log(obj[ismaxObj.val][0],obj[ismaxObj.val][obj[ismaxObj.val].length-1]);//最多的字母的第一个位置与最后一个位置
  console.log(ismaxObj);//出现次数最多的字母与次数
  console.log(obj);//数据重组直观看到数据分布
}
复制代码
如何统计字符串中出现最多的字母与个数

这是我给出的方案,也许还不是最优质的。望各位大佬指正。

总结

其实对于面试来说最重要的是考察面试者处理问题的逻辑思路,有些人能够解决问题,有些人能够以最优质的方案解决问题。前者是干活的人,后者是干好活的人。


以上所述就是小编给大家介绍的《如何统计字符串中出现最多的字母与个数》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

不是为了快乐

不是为了快乐

宗萨蒋扬钦哲仁波切 / 姚仁喜 / 深圳报业集团出版社 / 2013-1 / 38.00元

前行修持是一套完整的实修系统,它既是一切佛法修持的根基,又囊括了所有修持的精华,以及心灵之道上所需的一切;既适合入门者打造学佛基本功,也是修行人需要终生修持的心法。书中除了实际的方法指导之外,还不断启发佛法的珍贵与修持的必要,并处处可见对学佛者的鼓舞和纠正,其最终的用心,是让我们踏上不间断的修持之路,真正转化我们僵硬、散乱和困惑的心。 在现代人看来,快乐,理应是最值得追求的目标。我们希望生活......一起来看看 《不是为了快乐》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具