算法:寻找出现频率最低且出现最早的值
题目:给定字符串,寻找出现频率最低且出现最早的值
举例:对于指定字符串'cbaacfdeaebb',应该找到 'f'。
实现:
-
思路:第一步:先根据给定字符串生成一个对象,对象以出现的字符为 key,以该字符出现的频率为 value。如'cbaacfdeaebb',则生成对象:
{'c':1,'b':2,'a':3,'f':1,'d':1,'e':2}
。第二步:根据生成的对象确定出现频率最低且出现最早的值。 - 代码:
var string = 'cbaacfdeaebb'//指定字符串 //第一步 var o = [].reduce.call(string,function(p,n){ p[n] = (p[n] || 0) + 1; return p },{}) //第二步 s = Object.keys(o).reduce(function(p,n){ if (o[p] < o[n]) return p; if (o[p] > o[n]) return n; //因为使用了 Object.keys(),该方法生成的数组可能会重排序,所以要比较结果值在原字符串中的位置,以确保题目要求的『出现最早』条件成立。 if (o[p] == o[n]) return string.indexOf(p) < string.indexOf(n) ? p : n; });
Comments