leetcode49题字母异位词分组
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
比如说“eat”,“tea“,”tan",“ate”,“nat”,“bat”,那么输出的结果就是
[“ate”,“eat”,“tea”]
[“nat”,“tan”]
[“bat”]
在这里我们认为只有字母顺序不同的字符串是一起的,于是我们考虑到能否在这些只有字母不同的字符串中找到共同点。如果我们对字符串中的字母按照一定的顺序来进行排序,那么只有字母顺序不同的字符串排序得到的最终结果是相同的。
使用哈希表的数据结构,将排序后的结果作为关键字,把同一类的就可以统计到一起。
class solution{
public:
vector<vector<string>> groupAnagrams(vector<string>& strs){
unordered_map<string,vector<string>> hash;//定义一个哈希表
for(auto str:strs){
string key=str;
sort(key.begin(),key.end());//对字符串的字符排序
hash[key].push_back(str);
}
vector<vector<string>> res;
for(auto item:hash) res.push_back(item.second);//item.second是string的映射位置
return res;
}
}
这里map也能实现,但是map的底层实现是平衡树,时间复杂度是O(log(n)),而哈希表的操作时间复杂度都是O(1)级别的。