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/ 谢谢。

你可能感兴趣的:(LeetCode)