# LeetCode: Anagrams

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<algorithm>
#include<map>
using namespace::std;
class Solution {
public:
long RSHash(string str)
{
int a = 378551;
int b = 63689;
long hash = 0;
for(int i = 0; i < str.size(); i++)
{
hash = hash * a + str[i];
a = a * b;
}
return hash;
}
vector<string> anagrams(vector<string> &strs) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<string> copy(strs);
vector<string> result;
map<long, vector<int> > mymap;
long key = 0;
for(size_t i = 0; i < strs.size(); i++)
{
sort(strs[i].begin(), strs[i].end());
}

for(size_t i = 0; i < strs.size(); i++)
{
//mymap[strs[i]].push_back(i);
mymap[RSHash(strs[i])].push_back(i);
}

for(size_t i = 0; i < strs.size(); i++)
{
if(mymap[RSHash(strs[i])].size() > 1)
while(mymap[RSHash(strs[i])].size() > 0)
{
result.push_back(copy[mymap[RSHash(strs[i])].back()]);
mymap[RSHash(strs[i])].pop_back();
}

}

return result;

}
};
int main()
{
vector<string> aa;

aa.push_back("tea");
aa.push_back("ate");
aa.push_back("eta");

Solution ss;
ss.anagrams(aa);
//	int a;
//	cout<<a<<endl;
//	ss.print(ss.threeSum(aa));
}


for(int i = 0; i < size; i++)

map[hashvalue].push_back(i);

Round 2:

class Solution {
public:
vector<string> anagrams(vector<string> &strs) {
map<string, int> map;
vector<string> result;
for(int i = 0; i < strs.size(); i++)
{
string temp = strs[i];
std::sort(temp.begin(), temp.end());
if(map[temp] == 0)
map[temp] = i+1;
else if(map[temp] == -1)
{
result.push_back(strs[i]);
}
else
{
result.push_back(strs[map[temp]-1]);
result.push_back(strs[i]);
map[temp] = -1;
}
}
return result;
}
};

• 本文已收录于以下专栏：

举报原因： 您举报文章：LeetCode: Anagrams 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)