题目描述:
Given an array of strings, group anagrams together.
For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
Return:
[ ["ate", "eat","tea"], ["nat","tan"], ["bat"] ]
分析:
题意:给定一个字符串数组,返回把错位词聚类的结果。错位词:两个字符串单词,除了字母顺序不同之外,其它的都相同。
思路:我们需要聚类错位词,首先找到它们的共同点:包含相同数量和种类的字母。因此,我们把每个字符串单词排序之后的结果作为key,那么错位词就可以作为values聚在一起。最后,根据各个key,返回聚类的结果。
代码:
#include <bits/stdc++.h>
using namespace std;
// map + sort
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> ans;
int n = strs.size();
// Exceptional Case:
if(n == 0){
return ans;
}
map<string, vector<string>> m;
for(string str: strs){
string pre_str = str;
sort(str.begin(), str.end());
m[str].push_back(pre_str);
}
for(auto &p: m){
ans.push_back(p.second);
}
return ans;
}
};