Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
题意:给你一个字符串数组,返回所有变位字符串的集合(变位字符串的意思是两个字符串包含的字符类型和各个字符出现的次数均相等)。
解题思路:1)对数组的每个字符串先进行排序,然后用关联容器map存储每个字符串。
2)如果当前的字符串不存在于map中,将排序的当前字符串作为key(键值)存储到map中,并将value置为字符串在数组中的位置。
3)如果存在于map中,若之前的字符串尚未保存到result中,则先将之前的字符串存进result中,然后再存储当前的字符串。需要注意的是,需要在数组中查找字符串进行存储,而不是直接将排序后的字符串进行存储。
class Solution {
public:
vector<string> anagrams(vector<string> &strs) {
map<string,int> m;
vector<string> result;
unsigned int len=strs.size();
for(unsigned int i=0;i<len;i++)
{
string a=strs[i];
sort(a.begin(),a.end());
if(m.find(a)==m.end()) //a不存在于m中
{
m[a]=i;
}
else //a存在于m中
{
int index=m[a];
if(index>=0)
{
result.push_back(strs[index]);
m[a]=-1;
}
result.push_back(strs[i]);
}
}
return result;
}
};