49. Group Anagrams
Given an array of strings, group anagrams together.
For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
Return:
[
["ate", "eat","tea"],
["nat","tan"],
["bat"]
]
Note: All inputs will be in lower-case.
题目大意:给定一些字符串,把由相同字母组成的字符串归为一组,放到新的二维字符串数组中,每一行是同一组字符串。
解题思路:用到了map数据结构,键key是按字典序排列的字符串,值是与key有相同字母组合的字符串的vector数组。遍历字符串数组,获取每个字符串的按字典序升序排列的key,放入key对应的map数组中。再遍历一次字符串数组,把对应key的map数组压入结果数组ans中。
代码:
class Solution {
public:
vector<vector<string> > groupAnagrams(vector<string>& strs) {
vector<vector<string> > ans;
int n = strs.size();
map<string,vector<string> > mp;
map<string,int> vis;
for(int i = 0;i < n; i ++){
string s = strs[i];
sort(s.begin(),s.end());
vis[s] = 1;
mp[s].push_back(strs[i]);
}
for(int i = 0;i < n;i ++){
string s = strs[i];
sort(s.begin(),s.end());
if(vis[s]){
ans.push_back(mp[s]);
vis[s] = 0;
}
}
return ans;
}
};