Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
class Solution {
public:
vector<string> anagrams(vector<string> &strs) {
vector<string> result;
if(strs.empty()){
return result;
}
string s;
map<string,vector<int> > wordMap;
map<string,vector<int> >::iterator iter;
for(int i=0;i<strs.size();i++){
s=strs[i];
sort(s.begin(),s.end());
iter=wordMap.find(s);
if(iter==wordMap.end()){
vector<int> vec;
vec.push_back(i);
wordMap.insert(make_pair(s,vec));
}else{
iter->second.push_back(i);
}
}
iter=wordMap.begin();
while(iter!=wordMap.end()){
if(iter->second.size()>1){
for(int i=0;i<iter->second.size();i++){
result.push_back(strs[iter->second[i]]);
}
}
iter++;
}
return result;
}
};