题目:
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
思想:
首先理解这里的“Anagram”是表示string的单词一样只是排列顺序不同的单词组合,如strs="eat,tea,ate"。理解了“Anagram”之后,我们可以采用排序,map的方法来解决该问题。首先对每个词进行排序,以便能够找到属于同一组的anagram,然后,在将当前词存储到Map<string,int>,string表示单词排序后的结果,i表示该单词在原strs中的位置。
代码:
class Solution {
public:
vector<string> anagrams(vector<string>& strs) {
vector<string >res;
int len = strs.size();
map<string, int> anagramsHashtable;
for (int i = 0; i < len; i++)
{
string s = strs[i];
sort(s.begin(), s.end());
if (anagramsHashtable.find(s) == anagramsHashtable.end())
{
anagramsHashtable[s] = i;
}
else
{
if (anagramsHashtable[s] >= 0)//已经存在
{
res.push_back(strs[anagramsHashtable[s]]);//将先前存入的string输出,为了保证值输出一次,需将anangramsHashtable[s]置一
anagramsHashtable[s] = - 1;
}
res.push_back(strs[i]);
}
}
return res;
}
};