Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
[Solution]
FOR ANY string st IN strs,
1) sort st
2) hash st, since st is sorted, all anagrams will be hash to one value.
1 vector<string> anagrams(vector<string> &strs) 2 { 3 unordered_map<string, int>table; 4 vector<string> result; 5 6 for (int i = 0; i < strs.size(); i++) 7 { 8 string st = strs[i]; 9 sort(st.begin(), st.end()); 10 11 if (table.find(st) == table.end()) 12 { 13 table[st] = i; 14 } 15 else 16 { 17 if (table[st] >= 0) 18 { 19 result.push_back(strs[table[st]]); 20 table[st] = -1; 21 } 22 result.push_back(strs[i]); 23 } 24 } 25 26 return result; 27 }