【哈希】LC 49.字母异位词分组

📅 2026/7/18 3:38:59 👁️ 阅读次数 📝 编程学习
【哈希】LC 49.字母异位词分组

文章目录

  • 前言
  • 一、题目
    • 1、原题链接
    • 2、题目描述
  • 二、个人思路整理
    • 1、思路分析
    • 2、解题代码
  • 三、知识风暴

前言

本专栏文章为《LeetCode 热题 100》的刷题题解,相关内容如有侵权,立即删除。

一、题目

1、原题链接

49.字母异位词分组

2、题目描述

二、个人思路整理

1、思路分析

思路参考字母异位词分组

利用哈希表的思想:由于每组异位词在排序后字符串是均相等的,因此可以将每组异位词排序后的字符串作为哈希表的key,未排序后的原字符串作为哈希表中其对应keyvalue,当遍历完输入字符串数组后,哈希表中就已经将其分好组了,最后遍历哈希表输出所有key对应的value即可。

2、解题代码

classSolution{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(autoiter:m){ans.push_back(iter.second);}returnans;}};

三、知识风暴

  1. 循环中&引用传递与值传递
  • &引用传递:不会发生任何拷贝,速度极快,在需要修改原数据时使用;
  • 值传递:每次循环会复制一份全新副本,会极大消耗CPU时间和内存,在“只想读取,且数据很小(如数字)”时使用。
  1. .->的区分与使用
  • .:用对象的本体引用访问成员;
for(autoiter:m){ans.push_back(iter.second);}
  • ->:用对象的指针迭代器(指向对象的指针)访问成员。
for(autoiter=m.begin();iter!=m.end();iter++){ans.push_back(iter->second);}