Anagrams

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

Note: All inputs will be in lower-case.

C++:
01 vector<string> anagrams(vector<string> &strs) {
02         vector<string> a;
03         map<string,vector<int>> m;
04         for(int i=0;i<strs.size();i++){
05             string tmp=strs[i];
06             int n=tmp.size();
07             char* buf=new char[n];
08             for(int j=0;j<n;j++)
09                 buf[j]=tmp[j];
10             qsort(buf,n,sizeof(char),compare);
11             string s;
12             for(int j=0;j<n;j++)
13                 s+=buf[j];
14             if(m.find(s)==m.end()){
15                 vector<int> v;
16                 v.push_back(i);
17                 m[s]=v;
18             }
19             else{
20                 m[s].push_back(i);
21             }
22         }
23         map<string,vector<int>>::iterator it=m.begin();
24         for(;it!=m.end();it++){
25             vector <int> t=it->second;
26             if(t.size()>1){
27                 for(int i=0;i<t.size();i++){
28                     a.push_back(strs[t[i]]);
29                 }
30             }
31         }
32         return a;
33 }
Advertisements
This entry was posted in String. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s