题目描述:
Given an array of strings, group anagrams together.
Example:
Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
Note:
- All inputs will be in lowercase.
- The order of your output does not matter.
将字母异位词分组,最直接的方法就是把每个字符串的字符排序,那么字母异位词都相等,利用哈希表把相同的字符串的下标储存在一起,同时在排序前先备份一个原始的数组,根据下标得到最终结果。
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string> > result;
if(strs.empty()) return result;
vector<string> temp=strs;
for(int i=0;i<strs.size();i++)
sort(strs[i].begin(),strs[i].end());
unordered_map<string,vector<int> > x;
for(int i=0;i<strs.size();i++)
x[strs[i]].push_back(i);
for(unordered_map<string,vector<int> >::iterator it=x.begin();it!=x.end();it++)
{
vector<string> y;
for(int i=0;i<it->second.size();i++)
y.push_back(temp[it->second[i]]);
result.push_back(y);
}
return result;
}
};