https://leetcode-cn.com/problems/group-anagrams/
思路:字典+sort,第一个效果好
vector<vector<string> > groupAnagrams(vector<string>& strs) {
map<string, vector<string> > mp;
for(int i = 0; i < strs.size(); i++) {
string temp = strs[i];
//sort排序,存到字典中
sort(strs[i].begin(), strs[i].end());
mp[strs[i]].push_back(temp);
//cout << strs[i] << " " << temp << endl;
}
vector<vector<string> > res;
map<string, vector<string> >::iterator it;
//从map中获取value,map->first, map->second.at(i)
for (it = mp.begin(); it != mp.end(); ++it) {
vector<string> temp;
for (int i = 0; i < it->second.size(); i++) {
temp.push_back(it->second.at(i));
}
res.push_back(temp);
}
return res;
}
vector<vector<string> > groupAnagrams(vector<string>& strs) {
map<string, vector<string> > mp;
for(int i = 0; i < strs.size(); i++) {
//string temp = strs[i];
//sort(strs[i].begin(), strs[i].end());
//26个字母映射
vector<char> num(26, 0);
for (int j = 0; j < strs[i].size(); j++) {
num[strs[i][j] - 'a'] += 1;
}
string temp = "";
for (int j = 0; j < 26; j++) {
if (num[j]) {
temp.append(num[j], j + 'a');
}
}
mp[temp].push_back(strs[i]);
}
vector<vector<string> > res;
map<string, vector<string> >::iterator it;
for (it = mp.begin(); it != mp.end(); ++it) {
vector<string> temp;
for (int i = 0; i < it->second.size(); i++) {
temp.push_back(it->second.at(i));
}
res.push_back(temp);
}
return res;
}