题目
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
题目没有表达地很清楚,
所谓anagram指:两个单词包含相同的字母完全相同,仅仅是排序不同。
要求返回给定单词序列中所有符合要求的词。
将各个单词的字母组成按字典顺序排序,然后插入到map中,重复时输出原有单词。
代码:
class Solution {
public:
vector<string> anagrams(vector<string> &strs) {
vector<string> ans;
int i;
vector<string> sorted=strs; //字母排序好的字符串
for(i=0;i<sorted.size();i++)
sort(sorted[i].begin(),sorted[i].end());
map<string,int> index; //按排好序的搜索
for(i=0;i<sorted.size();i++)
{
if(index[sorted[i]]==0)
index[sorted[i]]=i+1;
else
{
ans.push_back(strs[i]);
if(index[sorted[i]]>0)
{
ans.push_back(strs[index[sorted[i]]-1]);
index[sorted[i]]=-1;
}
}
}
return ans;
}
};