【算法速刷(2/100)】LeetCode —— 49.字母异位词分组

在该题目中,算法分为两大操作,第一个操作是确定其是哪个词的异位词,第二个操作是将其放入对应的异位词集合

因此,第一个操作要求我们寻找一个标识一组异位词的方法,由于题目所给数据均为独立单词,因此最好的方法是直接对字符串进行排序,一组异位词排序后得到的是相同的字符串

对于第二个操作,为了将相同异位词放入同一个集合,可以创建一个以排序后的字符串作为键的哈希表,而该哈希表的值可以是数组,也可以是下标

        如果是数组,则需要在稍后额外for循环去构造结果数组

        如果是下标,则可以在操作哈希表时即构造结果数组

以下是使用排序字符串和下标作为键值对的哈希表的实现方法

vector<vector<string>> groupAnagrams(vector<string>& strs) {
        //对字母进行排序,若有该字母,则将其加入对应数组
        vector<vector<string>> res;
        unordered_map<string, int> resHash;

        for(string& str : strs)
        {
            string s = str;
            sort(s.begin(), s.end());

            if(!resHash.count(s))
            {
                res.push_back(vector<string>());
                resHash.emplace(s, res.size() - 1);
            }

            res[resHash[s]].push_back(str);
        }

        return res;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值