算法:寻找出现频率最低且出现最早的值

题目:给定字符串,寻找出现频率最低且出现最早的值

举例:对于指定字符串'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
Write a Comment