文章目录
前言
本专栏文章为《LeetCode 热题 100》的刷题题解,相关内容如有侵权,立即删除。
一、题目
1、原题链接
2、题目描述
二、个人思路整理
1、思路分析
思路参考字母异位词分组
利用哈希表的思想:由于每组异位词在排序后字符串是均相等的,因此可以将每组异位词排序后的字符串作为哈希表的key,未排序后的原字符串作为哈希表中其对应key的value,当遍历完输入字符串数组后,哈希表中就已经将其分好组了,最后遍历哈希表输出所有key对应的value即可。
2、解题代码
cpp
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string, vector<string>> m;
for(string& str: strs) {
string key = str;
sort(key.begin(), key.end()); //排序每个哈希key,相同key的作为一组
m[key].emplace_back(str); //将排序前的字符串作为value
}
vector<vector<string>> ans;
for(auto iter: m) {
ans.push_back(iter.second);
}
return ans;
}
};
三、知识风暴
- 循环中
&引用传递与值传递
&引用传递:不会发生任何拷贝,速度极快,在需要修改原数据时使用;- 值传递:每次循环会复制一份全新副本,会极大消耗CPU时间和内存,在"只想读取,且数据很小(如数字)"时使用。
.和->的区分与使用
.:用对象的本体 或引用访问成员;
cpp
for (auto iter : m) {
ans.push_back(iter.second);
}
->:用对象的指针 或迭代器(指向对象的指针)访问成员。
cpp
for (auto iter = m.begin(); iter != m.end(); iter++) {
ans.push_back(iter->second);
}
