刚开始没有理解这一题的意思,本题的要求是,返回给定数组中由回文词构法构成的字符串的集合,
回文词构法,即为由相同的字母组成,但是在每一个单词中字母出现的顺序不同,例如, eat, ate
通过回文词构法的含义可知,若要判断两个单词是否是回文词构法的,只需将两者中的字母按照字典顺序排序,完全相同的即为符合热要求的。
利用map数据结构,键值为排序后的字符串,数值为第一次出现该词的位置
class Solution {
public:
vector<string> anagrams(vector<string> &strs) {
vector<string> result;
if(strs.size()==0||strs.size()==1)
return result;
map<string, int> anagram;
for(int i = 0; i < strs.size(); ++i)
{
string tempstr = strs[i];
sort(tempstr.begin(), tempstr.end());
if(anagram.find(tempstr)==anagram.end())
{
anagram[tempstr] = i;
}
else
{
if(anagram[tempstr]>=0)
{
result.push_back(strs[anagram[tempstr]]);
anagram[tempstr] = -1;
}
result.push_back(strs[i]);
}
}
return result;
}
};