LeetCode 面试经典150题 [44/150 字母异位词组合]


avatar
GuoYulong 2024-06-26 52

题目描述

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

输入: strs = [""]
输出: [[""]]

个人C++解答


思路主要是参考官方题解,自己做的话估计会很复杂;
根据题目描述,需要找到所有词的所有异位词,需要分析其共有特点,即异位词的所有字母相同,即将异位词重新排序后,得到的是相同的一个单词;同时,根据哈希表的特性,不会保存相同的key,但是value可以保存数组或向量等,所以我们可以进行如下操作:将哈希表的value设置为string的vector类型,遍历strs数组,将每个单词排序后作为key,原单词作为value保存至HashMap中,这样就可以得到每一组异位词;最后便利哈希表将异位词取出;

GYL
class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string,vector<string>> HashMap;
        for(const string str:strs){
            string key = str;
            sort(key.begin(),key.end());
            HashMap[key].push_back(str);
        }
        vector<vector<string>> result;
        for(auto it = HashMap.begin();it!=HashMap.end();++it){
            result.push_back(it->second);
        }
        return result;
    }
};

相关阅读

注意!!!

新增会员中心页面,方便管理个人账户,充值功能暂不开启,请勿为本网站进行任何充值活动!!!

通知!!!

① 过年好!!!拖更几个月了已经,年后继续更新!!