题解 | #字符串出现次数的TopK问题#

字符串出现次数的TopK问题

http://www.nowcoder.com/practice/fd711bdfa0e840b381d7e1b82183b3ee

  1. 用map统计次数
  2. 用结构体表示(str, count) 放入到vector中进行排序
  3. 排完序取前k个作为结果
public:
    map<string, int>count;
    
    struct node{
        string str;
        int c;
        node(string str, int c): str(str), c(c){}
    };
    
    static bool cmp(node a, node b){
        if(a.c == b.c)
            return a.str < b.str;  // 频数一样时,字典序小的排前面
        else return a.c > b.c;  // 频数大的在前面
    }
    
    vector<vector<string> > topKstrings(vector<string>& strings, int k) {
        vector<vector<string>>res;
        
        for(int i=0; i<strings.size(); i++)  // 统计次数
            count[strings[i]]++;
        
        // 把map里的放到vec中准备排序
        map<string, int>::iterator it;
        vector<node>vec;
        for(it=count.begin(); it!=count.end(); it++){
            vec.push_back(node(it->first, it->second));
        }
        sort(vec.begin(), vec.end(), cmp);

        // 排完序后取前k个放到结果里
        for(int i=0; i<k; i++)
            res.push_back({vec[i].str, to_string(vec[i].c)});
        
        return res;
    }
};
全部评论

相关推荐

点赞 评论 收藏
分享
06-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
实习吐槽大会
点赞 评论 收藏
分享
fRank1e:吓得我不敢去外包了,但是目前也只有外包这一个实习,我还要继续去吗
点赞 评论 收藏
分享
07-02 13:52
武汉大学 golang
骗你的不露头也秒
牛客87776816...:😃查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务