
Given an array of strings, group anagrams together.
For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
Return:
[
["ate", "eat","tea"],
["nat","tan"],
["bat"]
]
Note:
- For the return value, each inner list's elements must follow the lexicographic order.
- All inputs will be in lower-case.
思路:
anagram: 由颠倒字母而成的单词
anagram无关乎字母出现的顺序,所以将字母排序后再比较每个字母出现的次数
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
if (strs.size() <= ) return result; vector<vector<string>> result;
map<string,int> anagram;
int resIndex = ;
string s; for (int i = ; i < strs.size(); ++i)
{
s = strs[i];
sort(s.begin(), s.end()); //anagram无关乎字母顺序,所以将string按字母排序后再比较
if (anagram.find(s) == anagram.end()) { //如果还没有出现过该anagram
vector<string> item;
item.push_back(strs[i]);
result.push_back(item);
anagram.insert(make_pair(s, resIndex++));
} else {
result[anagram[s]].push_back(strs[i]);
}
} //each inner list's elements must follow the lexicographic order
for(int i = ; i < result.size(); i++){
sort(result[i].begin(), result[i].end());
}
return result;
}
};