题解 | #牛棚品种分类# 哈希

牛棚品种分类

https://www.nowcoder.com/practice/0b6068f804b9426aa737ea8606e8d5c3

知识点

哈希

思路

首先统计每个字符串的每个字符的个数,如果两个字符串是同一类的,那么这个26个数所表示的状态就是一样的。因此我们只需要用一个哈希表来记录相同状态有哪些字符串再连接即可。

实现上有两点,一是由于没有现成的哈希函数,unordered_map用不了,可以用map代替。第二点就是输出的格式很麻烦,要的是同一状态的字符串用逗号连接起来的结果中按字典序排序的结果。

AC Code(C++)

#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param strs string字符串vector 
     * @return string字符串vector
     */
    using ai26 = array<int, 26>;
    vector<string> groupAnagrams(vector<string>& strs) {
        map<ai26, vector<string>> mp;
        for (auto& s : strs) {
            mp[get(s)].push_back(s);
        }
        vector<string> keys;
        for (auto& [k, v] : mp) {
            keys.push_back(v[0]);
        }
        sort(keys.begin(), keys.end());
        vector<string> res;
        for (auto& k : keys) {
            auto& vec = mp[get(k)];
            res.push_back(join(vec));
        }
        return res;
    }
    ai26 get(string& s) {
        ai26 res{};
        for (auto c : s) {
            res[c - 'a'] += 1;
        }
        return res;
    }
    string join(vector<string>& v) {
        string s = v[0];
        for (int i = 1; i < v.size(); i ++) {
            s += ',';
            s += v[i];
        }
        return s;
    }
};

全部评论

相关推荐

廉影霜:学到了下次跟mt装古风小生
点赞 评论 收藏
分享
10天面了6次
flmz_Kk:强度好大,是无线复活吗
点赞 评论 收藏
分享
程序员小白条:学历和简历问题,你想走开发,现在很难的啦,尤其后端方向很难走,前端、测开,都会好很多,另外要等8月底和9月初去投日常
点赞 评论 收藏
分享
Giselle_Po...:1. 可能是你投递的定位不是很对,虽然硕士是985,但是本科属于普通本科,如果你投互联网大厂的话大概率会被卡本科,中厂可能会更适合你。2. 简历观感不是很好,个人感觉看的很费劲。最开始手机邮箱那堆字啥的我建议你删掉,字太多了,我作为一个路人已经有点没耐心看了,留手机邮箱姓名即可了。3. 学历背景本硕格式要尽量统一,上面核心课程,你下面写gap和校园经历,有点分裂。而且本科绩点3.5以下不建议写,因为你们学校换算完有点吃亏。你要想保留就留这个10%就好了,一般3.5很多学校换算完对应20-25%,有参照你这个占比很奇怪,初筛人家不会细看你后面写的奖学金那些的。校园经历另起一个part会更好。4. 你的实习和项目竞赛都超级好,超过起码80-90%的人,但是感觉你的表述可以改改语句,因为现在这种表述有点AI话,然后可以再量化一点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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