我的做法:
会超时
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> ans;
for(int i=0;i<strs.size();i++){
bool findPlace=false;
for(int j=0;j<ans.size();j++){
if(AequalB(ans[j][0],strs[i])){
ans[j].push_back(strs[i]);
findPlace=true;
}
}
if(!findPlace){
vector<string> tmp;
tmp.push_back(strs[i]);
ans.push_back(tmp);
}
}
return ans;
}
bool AequalB(string a,string b){
int bucket[26];
if(a.size()!=b.size()) return false;
memset(bucket,0,sizeof(bucket));
for(int i=0;i<a.size();i++){
bucket[a[i] - 'a']++;
}
for(int i=0;i<b.size();i++){
bucket[b[i] - 'a']--;
}
for(int i=0;i<26;i++){
if(bucket[i]!=0)
return false;
}
return true;
}
};
官方的做法:
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> ans;
unordered_map<string,vector<string>> mp;
for(int i=0;i<strs.size();i++){
string key = strs[i];
sort(key.begin(),key.end());//原来对于一个string字符串也可以直接排序
mp[key].push_back(strs[i]);
}
// cout<<tmp;
for(auto it = mp.begin();it != mp.end();it++){
ans.push_back(it->second);
}
return ans;
}
};
使用sort可以原地字符数组排序
有时候对于某一个样例 测试通过了, 而没通过提交 可能是数组未初始化的原因,导致重复提交的时候某一次初始化不是0