题目描述
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"] 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""] 输出: [[""]]
个人C++解答
GYL
思路主要是参考官方题解,自己做的话估计会很复杂;
根据题目描述,需要找到所有词的所有异位词,需要分析其共有特点,即异位词的所有字母相同,即将异位词重新排序后,得到的是相同的一个单词;同时,根据哈希表的特性,不会保存相同的key,但是value可以保存数组或向量等,所以我们可以进行如下操作:将哈希表的value设置为string的vector类型,遍历strs数组,将每个单词排序后作为key,原单词作为value保存至HashMap中,这样就可以得到每一组异位词;最后便利哈希表将异位词取出;
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; } };