#include<bits/stdc++.h>
using namespace std;
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string,vector<string>>m;
for(int i=0;i<strs.size();i++){
string s=strs[i];
sort(s.begin(),s.end());
m[s].push_back(strs[i]);
}
vector<vector<string>> result;
for (auto it = m.begin(); it != m.end(); it++) {
result.push_back(it->second);
}
return result;
}
int main(){
vector<string>str={"eat", "tea", "tan", "ate", "nat", "bat"};
vector<vector<string>>ress=groupAnagrams(str);
for(int i=0;i<ress.size();i++){
vector<string>& vec = ress[i];
for(int j=0;j<vec.size();j++){
cout<<ress[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
力扣版本
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string,vector<string>>m;
for(int i=0;i<strs.size();i++){
string s=strs[i];
sort(s.begin(),s.end());
m[s].push_back(strs[i]);
}
vector<vector<string>> result;
for (auto it = m.begin(); it != m.end(); it++) {
result.push_back(it->second);
}
return result;
}
};
总结:
来不及写了电脑要没电了
1.unorderedmap的用法:左边是key的类型右边是value类型
2.遍历不太会用auto,但是好像直接打上去就没事了
for (unordered_map<string, vector<string>>::iterator it = m.begin(); it != m.end(); ++it) { result.push_back(it->second); }
不用auto就得这么写了
3.it->first
访问当前元素的键it->second
访问当前元素的值
因为迭代器返回的是一个pair
4.不能固定使用了 ress[0].size()
来作为内层循环的条件,这个大小是针对第一个子向量的,而其他子向量可能有不同的大小。
5.vector<string>& vec = ress[i];
中的 &
是用来声明 vec
为 ress[i]
的引用。这样做的目的是为了避免复制 ress[i]
中的内容,从而提高效率。使用引用意味着 vec
直接引用了 ress[i]
,任何对 vec
的修改也会直接影响 ress[i]
,同时避免了不必要的内存复制开销。