问题描述:
Given an array of strings, group anagrams together.
示例:
Given: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
Return:
[ ["ate", "eat","tea"], ["nat","tan"], ["bat"] ]问题分析:
采用map数据结构进行映射,把每个单词排序后相同的放到同一组内即可。
过程详见代码:
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string, vector<string>> mp;
for (string s : strs)
{
string t = strSort(s);
mp[t].push_back(s);
}
vector<vector<string>> anagrams;
for (auto m : mp)
{
anagrams.push_back(m.second);
}
return anagrams;
}
private:
string strSort(string& s) {
int count[26] = { 0 }, n = s.length();
for (int i = 0; i < n; i++)
count[s[i] - 'a']++;
int p = 0;
string t(n, 'a');
for (int j = 0; j < 26; j++)
for (int i = 0; i < count[j]; i++)
t[p++] += j;
return t;
}
};