class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string,vector<string>>read;
for(string str:strs){
string key=str;
sort(key.begin(),key.end());
read[key].emplace_back(str);
}
vector<vector<string>> ans;
for(auto n:read)ans.emplace_back(n.second);
return ans;
}
};
在做这一题时,是先看了解题思路再进行的。
用到了unordered_map容器
unordered_map容器
map 容器
first和second
拿这道题来说,最后用的 n.second 就是利用n来访问容器read的值,此时n.second就是每次遍历的read容器的value: first——key second——value
如果直接对容器取key和value值,需要用到->
read->first / read->second 如下↓(c语言)
map<string, int>::iterator it;
for(it = s.begin(); it != s.end(); it++) {
if(it->second == 1) {
printf("%s\n", it->first);
break;
}
}
begin和end
首先我们要明确,begin和end是对于容器而言的,我们用到的vector、map等都是容器。
假设我们有容器a,则:
1.a.begin() 是返回指向容器初始位置的指针
2.a.end() 是返回指向容器最后一个数据单元+1的指针(因此,如果我们要返回最后一个位置,那么应该返回的是 --a.end() )
下标操作
map<string,int>student;
student["lihua"]=1;
这样就定义了一个{"lihua",1}; 插入了容器中了
额外知识for(auto a:b)
1. for(auto a:b) 利用a访问b 但是不改变b的值;
2. for(auto &a:b) 用&引用,可以通过对a赋值来对容器b的内容填充。