题目:
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
代码如下:#include <iostream>
#include <vector>
#include <map>
#include <algorithm> sort
#include <string>
using namespace std;
vector <string> anagrams(vector <string> &strs)
{
vector <string> ret;
map <string,vector <const string *>> map_anagrams;
for(vector <string> ::iterator itr=strs.begin();itr!=strs.end();itr++)
{
string key(*itr);
sort(key.begin(),key.end());
map_anagrams[key].push_back(&*itr);
}
for(map <string,vector<const string *>> ::iterator mitr=map_anagrams.begin();mitr!=map_anagrams.end();mitr++)
{
if(mitr->second.size()>1)
{
for(vector<const string *>::iterator itr=mitr->second.begin();itr!=mitr->second.end();itr++)
ret.push_back(**itr);
}
}
return ret;
}
void print(vector<string >&str)
{
for(vector<string>::iterator itr=str.begin();itr!=str.end();itr++)
cout<<*itr<<'\t';
}
int main()
{
string s[7]={"abc","cba","bca","ad","da","123","1"};
vector <string> strs(s,s+7);
vector <string> ret;
ret=anagrams(strs);
print(ret);
//system("PAUSE");
return 0;
}
运行结果: