Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
思路:
最开始不理解题意。其实题目的意思是看原数组里面是否有些字符串是互相可以通过改变字母顺序转换的。这样的话使用一个map<string, int>,字符串作为key值,保存下标。遍历原数组,每访问一个字符串,先对它进行排序,看map是否有它,如果有的话,就存入结果vector,否则存入map。注意需要一个标记来记录第一个放入map的字符串是否放入结果,放入之前是字符串的下标,放入后改为-1.
代码:
1 vectoranagrams(vector &strs) { 2 // IMPORTANT: Please reset any member data you declared, as 3 // the same Solution instance will be reused for each test case. 4 vector result; 5 map table; 6 string tmp; 7 int n = strs.size(); 8 for(int i = 0; i < n; i++){ 9 tmp = strs[i];10 sort(tmp.begin(), tmp.end());11 if(table.find(tmp) == table.end()){12 table[tmp] = i;13 }14 else{15 if(table[tmp] != -1){16 result.push_back(strs[table[tmp]]);17 table[tmp] = -1;18 }19 result.push_back(strs[i]);20 }21 }22 return result;23 }