当前位置: 首页 > news >正文

【C++算法】60.哈希表_字母异位词分组

文章目录

    • 题目链接:
    • 题目描述:
    • 解法
    • C++ 算法代码:
    • 解释
        • 第1步:处理 "eat"
        • 第2步:处理 "tea"
        • 第3步:处理 "tan"
        • 第4步:处理 "ate"
        • 第5步:处理 "nat"
        • 第6步:处理 "bat"
        • 提取结果


题目链接:

49. 字母异位词分组


题目描述:

a6c6964de828963544726191147a4a63


解法

哈希表

  1. 判断两个字符串是不是字母异位词(排序)
  2. 分组<string,string[]>

例如:strs = ["eat", "tea", "tan", "ate", "nat", "bat"]

aet --> eat,tea,ate

ant --> tan,nat

abt --> bat

最后遍历哈希表,把里面的value提取出来。


C++ 算法代码:

class Solution 
{
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {// 创建哈希表,键为排序后的字符串(作为字母异位词的标识)// 值为原始字符串的集合(即所有属于该异位词组的原始字符串)unordered_map<string, vector<string>> hash;// 1. 遍历所有字符串,将字母异位词分组for(auto& s : strs){// 创建字符串副本并排序string tmp = s;sort(tmp.begin(), tmp.end());// 排序后的字符串作为键,原始字符串添加到对应的异位词组中// 例如:"eat"、"tea"、"ate" 排序后都是 "aet",因此会被分到同一组hash[tmp].push_back(s);}// 2. 从哈希表中提取结果,构建返回值vector<vector<string>> ret;// 使用结构化绑定遍历哈希表中的每个键值对// x是排序后的字符串(键),y是对应的字母异位词组(值)for(auto& [x, y] : hash){// 将每个异位词组添加到结果中ret.push_back(y);}return ret;}
};

解释

例如:strs = ["eat", "tea", "tan", "ate", "nat", "bat"]

第1步:处理 “eat”
  • 创建副本并排序:tmp = "eat" → sort → "aet"
  • 检查哈希表:hash["aet"] 不存在
  • 插入到哈希表:hash["aet"] = ["eat"]
  • 哈希表现在:hash = {"aet": ["eat"]}
第2步:处理 “tea”
  • 创建副本并排序:tmp = "tea" → sort → "aet"
  • 检查哈希表:hash["aet"] 已存在,其值为 ["eat"]
  • 更新哈希表:hash["aet"].push_back("tea") 添加原字符串
  • 哈希表现在:hash = {"aet": ["eat", "tea"]}
第3步:处理 “tan”
  • 创建副本并排序:tmp = "tan" → sort → "ant"
  • 检查哈希表:hash["ant"] 不存在
  • 插入到哈希表:hash["ant"] = ["tan"]
  • 哈希表现在:hash = {"aet": ["eat", "tea"], "ant": ["tan"]}
第4步:处理 “ate”
  • 创建副本并排序:tmp = "ate" → sort → "aet"
  • 检查哈希表:hash["aet"] 已存在,其值为 ["eat", "tea"]
  • 更新哈希表:hash["aet"].push_back("ate") 添加原字符串
  • 哈希表现在:hash = {"aet": ["eat", "tea", "ate"], "ant": ["tan"]}
第5步:处理 “nat”
  • 创建副本并排序:tmp = "nat" → sort → "ant"
  • 检查哈希表:hash["ant"] 已存在,其值为 ["tan"]
  • 更新哈希表:hash["ant"].push_back("nat") 添加原字符串
  • 哈希表现在:hash = {"aet": ["eat", "tea", "ate"], "ant": ["tan", "nat"]}
第6步:处理 “bat”
  • 创建副本并排序:tmp = "bat" → sort → "abt"
  • 检查哈希表:hash["abt"] 不存在
  • 插入到哈希表:hash["abt"] = ["bat"]
  • 哈希表现在:hash = {"aet": ["eat", "tea", "ate"], "ant": ["tan", "nat"], "abt": ["bat"]}
提取结果

遍历哈希表中的每个键值对,提取值部分(字符串组):

  1. "aet" 对应的值 ["eat", "tea", "ate"] → 添加到 ret
  2. "ant" 对应的值 ["tan", "nat"] → 添加到 ret
  3. "abt" 对应的值 ["bat"] → 添加到 ret

最终结果:ret = [["eat", "tea", "ate"], ["tan", "nat"], ["bat"]]

相关文章:

  • PG中通过GIST创建其他自定义索引
  • 深度学习入门:神经网络的学习
  • 入门51单片机(1)-----点灯大师梦开始的地方
  • 网络安全与信息安全的区别​及共通
  • CEPH OSD_SLOW_PING_TIME_FRONT/BACK 警告处理
  • MuJoCo(Multi-Joint Dynamics with Contact)机器人仿真器存在的问题
  • rook-ceph 慢盘导致的 OSD_SLOW_PING_TIME_[BACK/FRONT] 告警分析
  • Elasticvue-轻量级Elasticsearch可视化管理工具
  • 25软考新版系统分析师怎么备考?重点考哪些?(附新版备考资源)
  • G1 垃圾回收机制
  • Formality:Bug记录
  • 空格键会提交表单吗?HTML与JavaScript中的行为解析
  • Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
  • 神经网络如何表示数据
  • 每天五分钟深度学习PyTorch:RNN CELL模型原理以及搭建
  • 视频设备轨迹回放平台EasyCVR打造水库大坝智慧安防视频监控智能分析方案
  • bash的特性-bash中的引号
  • 网安知识“大乱炖“
  • vite前端项目在页面中引入根目录的json等文件
  • 意法半导体ST EDI 项目案例
  • 国务院安委会对辽宁辽阳一饭店重大火灾事故查处挂牌督办
  • 商务部:4月份以来的出口总体延续平稳增长态势
  • 人民日报头版:上海纵深推进浦东高水平改革开放
  • 上海市政府常务会议研究抓好稳就业稳企业稳市场稳预期工作,让企业感受温度
  • 专访|伊朗学者:美伊核谈不只是改革派立场,但伊朗不信任美国
  • 谁将主导“视觉大脑”?中国AI的下一个超级赛道