题目:
暴力方法:
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
std::unordered_set<std::string> uniqueWord;//单词字符唯一化集合
vector<vector<std::string>> res;//结果
for(int i=0;i<strs.size();i++){//计算唯一化
std::string tempStr=strs[i];
std::sort(tempStr.begin(),tempStr.end());
uniqueWord.insert(tempStr);
}
// std::cout<<uniqueWord.size()<<std::endl;
//寻找字母异位词
for(const auto & elem:uniqueWord){
vector<std::string> tempRes;
//std::cout<<strs.size()<<std::endl;
for(vector<std::string>::iterator it=strs.begin();it<strs.end();){
// std::cout<<"elem:"<<elem<<std::endl;
// std::cout<<"*it:"<<*it<<std::endl;
std::string tempStr=*it;
std::sort(tempStr.begin(),tempStr.end());
//std::cout<<"*it:"<<elem<<"--"<<*it<<"--"<<tempStr<<std::endl;
if(elem==tempStr){//取值
// std::cout<<*it;
tempRes.push_back(*it);
it=strs.erase(it);//剔除值 使得在剩下的值中进行查询 提高效率
}
else{
it++;
}
}
res.push_back(tempRes);
}
return res;
}
};
优化方法:
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
std::unordered_map<std::string,vector<std::string>> uniqueWord;//单词字符唯一化集
vector<vector<std::string>> res;
for(int i=0;i<strs.size();i++){//计算唯一化
std::string tempStr=strs[i];
std::sort(tempStr.begin(),tempStr.end());
uniqueWord[tempStr].push_back(strs[i]);
}
// std::cout<<uniqueWord.size()<<std::endl;
//寻找字母异位词
for(const auto & elem:uniqueWord){
// std::cout<<elem<<std::endl;
res.push_back(elem.second);
}
return res;
}
};