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/ 谢谢。
时间: 2024-10-26 23:55:56