力扣49-字母异位词分组

#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]; 中的 & 是用来声明 vecress[i] 的引用。这样做的目的是为了避免复制 ress[i] 中的内容,从而提高效率。使用引用意味着 vec 直接引用了 ress[i],任何对 vec 的修改也会直接影响 ress[i],同时避免了不必要的内存复制开销。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值