地址:https://leetcode.com/problems/group-anagrams/
题目:
Given an array of strings, group anagrams together.
Example:
理解:
已然忘了anagram是什么鬼。。
就是字母排列不同,但是组成相同的单词。
anagram排序后应该有相同的结果。
实现:
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string, vector<string>> mp;
for (string& s : strs) {
string t = s;
sort(t.begin(), t.end());
mp[t].push_back(s);
}
vector<vector<string>> anagrams;
for (auto m : mp) {
vector<string> anagram(m.second.begin(), m.second.end());
anagrams.push_back(anagram);
}
return anagrams;
}
};
不用sort的话,也可以用统计的字符结果作为一个key,然后在map里保存结果。
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string, vector<string>> mp;
for (string& s : strs) {
string t = getSorted(s);
mp[t].push_back(s);
}
vector<vector<string>> anagrams;
for (auto m : mp) {
vector<string> anagram(m.second.begin(), m.second.end());
anagrams.push_back(anagram);
}
return anagrams;
}
string getSorted(const string& s) {
string res(26, '0');
for (auto &c : s)
res[c - 'a']++;
return res;
}
};