题目大意:在给出的字符串数组中,将字母颠倒顺序后相同的单词归类
分析:map的考察。
方法一:将所有单词中的字母sort排序,排序后的单词作为map的键,排序前的单词加入该键的值(vector容器)中,然后遍历map按键输出即可。
方法二:将单词中的字母计数,用字符个数组成的字符串作为map的键,比如aab组成字符串#2#1。这种方法降低了时间复杂度,因为对单词排序O(nlogn),而对单词计数O(n)。
代码:
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> ans;
unordered_map<string,vector<string>> dic;
for(int i = 0;i < strs.size();i++){
string tmp = strs[i];
sort(tmp.begin(),tmp.end());
dic[tmp].push_back(strs[i]);
}
for(auto v : dic){
ans.push_back(v.second);
}
return ans;
}
};