[leetcode] Anagrams
Anagrams
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
anagrams特点:单词里的字母的种类和数目是一样的,只是改变了字母的排列顺序。
1 class Solution 2 { 3 public: 4 vector<string> anagrams(vector<string> &strs) 5 { 6 vector<string> ret; 7 vector<string> sort_strs(strs); 8 map<string, vector<int> > mymap; 9 map<string, vector<int> >::iterator it; 10 11 for(int i=0; i<strs.size(); i++) 12 { 13 sort(sort_strs[i].begin(), sort_strs[i].end()); //对字符串进行排序,使得属于同一类回文构词的词具有相同的字符串。 14 mymap[sort_strs[i]].push_back(i); //利用map不会插入同一主键的原则,统计字符串种类数,并记录字符串在原始strs中的位置。 15 } 16 17 for(it=mymap.begin(); it!=mymap.end(); it++) //遍历统计结果 18 { 19 if((*it).second.size()>1) //字符串出现的次数为两次以上,则它所对应的原始字符串符合题目要求。 20 { 21 for(int i=0; i<(*it).second.size(); i++) //遍历该排序字符串出现在strs中的位置,得到原始字符串,压入ret。 22 ret.push_back(strs[(*it).second[i]]); 23 } 24 } 25 26 return ret; 27 } 28 };