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

05.字母异位词分组

在这里插入图片描述

题意理解

🧠 什么是“字母异位词”?

字母异位词是指由相同的字母组成,只是排列顺序不同的单词。

比如

"eat" 和 "tea" 是异位词,它们都包含 'e'、'a' 和 't'。"ate" 也是它们的异位词。但是 "tan" 就不是,它包含 't'、'a'、'n',和上面三个字母不同。

✅ 方法一:排序作为哈希表 key

class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string, vector<string>> mp;for (const string& str : strs){string key = str;sort(key.begin(), key.end()); // 将字符串排序,作为哈希表 keymp[key].push_back(str);       // 将原字符串加入对应分组}vector<vector<string>> res;for (const auto& [key, group] : mp) {res.push_back(group);         // 提取所有 value 即为分组结果}return res;}
};

🔍 时间复杂度

  • 排序每个字符串 O(k log k),总共 n 个字符串 ⇒ O(nk log k)

💾 空间复杂度

  • 需要额外存储 HashMap 和结果集 ⇒ O(nk)

✅ 方法二:计数字符频率作为 key

class Solution 
{
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string, vector<string>> mp;for (string& str : strs) {vector<int> count(26, 0);for (char ch : str) {count[ch - 'a']++;}// 手动编码计数数组,例如 "aabbc" → "a2b2c1"string key;for (int i = 0; i < 26; ++i) {if (count[i] > 0) {key += (char)('a' + i);key += to_string(count[i]);}}mp[key].push_back(str);}vector<vector<string>> res;for (auto& [key, group] : mp) {res.push_back(group);}return res;}
};

🔍 时间复杂度

  • 每个字符串统计字母频率 O(k),总共 n 个 ⇒ O(nk)

💾 空间复杂度

  • 存储每个字符串、HashMap 以及编码 key ⇒ O(nk)
http://www.lryc.cn/news/2399481.html

相关文章:

  • Mac查看MySQL版本的命令
  • 【.net core】【watercloud】树形组件combotree导入及调用
  • [Java 基础]面向对象-封装
  • 2021 RoboCom 世界机器人开发者大赛-高职组(复赛)解题报告 | 珂学家
  • Python趣学篇:Pygame实现3D星空穿越动画
  • 基于Web的安全漏洞分析与修复平台设计与实现
  • 34.1STM32下的can总线实现知识(区分linux)_csdn
  • 相机Camera日志分析之二十四:高通相机Camx 基于预览1帧的process_capture_request三级日志分析详解
  • Linux 内核中 skb_dst_drop 的深入解析:路由缓存管理与版本实现差异
  • 考研系列—操作系统:冲刺笔记(4-5章)
  • 功能管理:基于 ABP 的 Feature Management 实现动态开关
  • 2025年想冲网安方向,该考华为安全HCIE还是CISSP?
  • ES6 深克隆与浅克隆详解:原理、实现与应用场景
  • Go Gin框架深度解析:高性能Web开发实践
  • mybatis 参数绑定错误示范(1)
  • 每天掌握一个Linux命令 - rpm
  • 常见的MySQL索引类型
  • 01串(二进制串)与集合之间存在天然的对应关系 ← bitset
  • 153页PPT麦肯锡咨询流程管理及企业五年发展布局构想与路径规划
  • [特殊字符] 革命性AI提示词优化平台正式开源!
  • 我的概要设计模板(以图书管理系统为例)
  • 【使用】【经验】docker 清理未使用的镜像的命令
  • DrissionPage爬虫包实战分享
  • iptables实战案例
  • 机器学习与深度学习07-随机森林01
  • 回归分析-非线性回归及岭回归.docx
  • Google AI 模式下的SEO革命:生成式搜索优化(GEO)与未来营销策略
  • docker创建postgreSql带多个init的sql
  • 掌握 MotionLayout:交互动画开发
  • SpringBoot中缓存@Cacheable出错