题目描述:
Given an array of strings, group anagrams together.
For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
Return:
[ ["ate", "eat","tea"], ["nat","tan"], ["bat"] ]找出字母组合相同的字符串,将其归为一类。首先对每个字符串排序,然后构建哈希表,如果是相同的key值的话,将字符串对应的下标记录,否则创建新的key值。完成分类后,再根据每一类所记录的下标,构建每一类的字符串数组。
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;
}
};