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是否出现过,可以通过Hashmap,但是由于anagram无关乎字母出现的顺序,所以也可以将字母排序后再比较字符串。
class Solution { public: vector<vector<string>> groupAnagrams(vector<string>& strs) { if (strs.size() <= 0) return result; vector<vector<string>> result; map<string,int> anagram; int resIndex = 0; string s; for (int i = 0; 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 = 0; i < result.size(); i++){ sort(result[i].begin(), result[i].end()); } return result; } };