class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
// 方法一:可行,但是速度较慢,参考:https://leetcode-cn.com/problems/VabMRr/
// int n = strs.size();
// vector<vector<int>> cnt(n, vector<int>(26));
// vector<vector<int>> length(101);
// for (int i=0;i<n;++i)
// {
// int m = strs[i].length();
// length[m].push_back(i);
// for (int j=0;j<m;++j)
// {
// cnt[i][strs[i][j]-'a']++;
// }
// }
// vector<vector<string>> res;
// for (int i=0;i<length.size();++i)
// {
// if (length[i].empty())
// continue;
// else if (length[i].size() == 1)
// {
// vector<string> v;
// v.push_back(strs[length[i][0]]);
// res.push_back(v);
// }
// else
// {
// vector<int>& index = length[i];
// while (!index.empty())
// {
// vector<int>& cntTmp = cnt[index[0]];
// vector<string> v;
// v.push_back(strs[index[0]]);
// index.erase(index.begin());
// vector<int>::iterator iter = index.begin();
// for (;iter != index.end();)
// {
// if (cnt[*iter] == cntTmp)
// {
// v.push_back(strs[*iter]);
// iter = index.erase(iter);
// }
// else
// {
// ++iter;
// }
// }
// res.push_back(v);
// }
// }
// }
// return res;
// 方法二
vector<vector<string>> res;
unordered_map<string, vector<string>> hash;
for (string& s:strs) //遍历每个单词
{
string tmp = s;
sort(tmp.begin(), tmp.end()); //将当前单词内的字母排序
hash[tmp].push_back(s); //将原始单词存入属于它的异位词组中
} //hash[tmp]表示tmp这组异位词的集合
for (auto& vec : hash) //遍历哈希表,将值存入结果集中
{
res.push_back(vec.second);
}
return res;
}
};
LeetCode-049-字符串-变位词-字母异位词分组
最新推荐文章于 2024-07-22 16:27:42 发布