[LeetCode 题解]: Anagrams

Given an array of strings, return all groups of strings that are anagrams.

Note: All inputs will be in lower-case.

题解: 判断字符串是否为回文构词法生成的。找出所有由同一回文构词法生成的字符串对。

使用map用于散列。 将strs中的字符串strs[i],在串内进行字典排序,生成key,原始s[i]不变。 将该字符串s[i]映射到key所对应位置。map[key].push_back(str[i]).

依次对字符串数组进行散列。

最后遍历map, 按照字典序将key挂载字符串大于1的位置元素输出到结果vector中。

 1 class Solution {
 2 public:
 3     vector<string> anagrams(vector<string> &strs) {
 4         int i;
 5         map<string, vector<string> > vset;
 6         for(i=0;i<strs.size();i++)
 7         {
 8             string key = strs[i];
 9             sort(key.begin(),key.end());
10             vset[key].push_back(strs[i]);
11         }
12         vector<string> result;
13         map<string, vector<string> >::iterator iter;
14         for(iter = vset.begin();iter!=vset.end(); iter++)
15         {
16             if(iter->second.size()>1)
17             {
18                 vector<string>::iterator viter;
19                 for(viter=iter->second.begin(); viter!=iter->second.end();viter++)
20                     result.push_back(*viter);
21             }
22         }
23         return result;        
24     }
25 };

转载请注明出处: http://www.cnblogs.com/double-win/ 谢谢。

posted @ 2014-06-11 16:15  Double_win  阅读(207)  评论(0编辑  收藏  举报