[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 };

 

posted @ 2015-01-24 16:34  imKirin  阅读(127)  评论(0编辑  收藏  举报