49. Group Anagrams
Medium
1491104FavoriteShare
Given an array of strings, group anagrams together.
Example:
Input: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
Note:
- All inputs will be in lowercase.
- The order of your output does not matter.
这道题比较简单。解题思路是:
1.逐个取出单词(strs)
2.将单词排序(sort),排序完的单词存到tmp中
3,建个map用来存放tmp和在ans中的位置
4.判断tmp是否在map中,在的话,查找在ans中的位置,加到这个位置上;不在map中,先加到ans里,然后再加到map里。由于新加进去一定是在ans的顶部,因此位置是ans.size()-1,把这个值放到map中。下次如果再加就按照这个值加进去。
画图说明一下思路:
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> ans;
ans.clear();
if(strs.size()==0)return ans;
map<string,int> mp;
map<string,int>::iterator p;
for(int i=0;i<strs.size();i++)
{
string tmp=strs[i];
sort(tmp.begin(),tmp.end());
p=mp.find(tmp);
if(p==mp.end())
{
vector<string> tmpv;
tmpv.push_back(strs[i]);
ans.push_back(tmpv);
mp.insert(pair<string,int>(tmp,ans.size()-1));
}
else
{
int n=mp.at(tmp);
ans[n].push_back(strs[i]);
}
}
return ans;
}
};