原题
LeetCode 49. 字母异位词分组
思路
- 对两个字母异位词进行排序后得到的字符串是相同的,所以可以用map存储下这个字符串是否出现过,且出现在ans数组里的下标。
- 其实还有一种思路,就是存储每个字符串中字母+次数得到一个字符串来作为哈希表的键,如"aabb"就是"a2b2"。
代码
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
map<string, int> stoi;
vector<vector<string>> ans;
for (int i = 0; i < strs.size(); i++) {
string s = strs[i];
sort(s.begin(), s.end());
if (stoi[s]) ans[stoi[s] - 1].push_back(strs[i]);
else {
vector<string> tmp = {strs[i]};
ans.push_back(tmp);
stoi[s] = ans.size();
}
}
return ans;
}
};
运行截图
收获
- 可以用map存储动态数组:unordered_map<string, vector < string >> mp;
- emplace_back()函数:和push_back()函数的作用一样,不过push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(优先移动)。所以emplace_back()函数会比push_back()效率高。