描述
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
#include <iostream>
#include<string>
#include<vector>
using namespace std;
bool IsEqual(string str1, string str2)
{
if (str1.size() != str2.size())
return false;
const int n = 26;
vector<int> temphash(26, 0);
for (int i = 0; i<str1.size(); i++)
{
int temp = str1[i] - 'a';
temphash[temp]++;
}
for (int i = 0; i<str2.size(); i++)
{
int temp = str2[i] - 'a';
temphash[temp]--;
}
bool flag = false;
for (int i = 0; i<n; i++)
{
if (temphash[i] != 0)
return flag;
}
flag = true;
return flag;
}
vector<vector<string>> Anagrams(vector<string> str)
{
vector<vector<string>> res;
int length = str.size();
vector<bool> flag(length, false);
for (int i = 0; i<length; i++)
{
if (!flag[i])
{
flag[i] = true;
vector<string> temp;
temp.push_back(str[i]);
for (int j = i + 1; j<length; j++)
{
if (!flag[j] && IsEqual(str[i], str[j]))
{
temp.push_back(str[j]);
flag[j] = true;
}
}
res.push_back(temp);
}
}
return res;
}
int main()
{
vector<string> str;
str.push_back("dirtyroom");
str.push_back("tydirroom");
str.push_back("eat");
str.push_back("ate");
str.push_back("seu");
vector<vector<string>> res;
res = Anagrams(str);
for (int i = 0; i<res.size(); i++)
{
for (int j = 0; j<res[i].size(); j++)
{
cout << res[i][j] << endl;
}
cout << endl;
}
}