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

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)

相关文章:

  • 量子通信:从科幻走向现实的未来通信技术
  • 线性模型选择中容易被忽视的关键洞察
  • Java八股文——Redis篇
  • 前端组件推荐 Swiper 轮播与 Lightbox 灯箱组件深度解析
  • grafana 批量视图备份及恢复(含数据源)
  • Spring Boot微服务架构(十一):独立部署是否抛弃了架构优势?
  • Windows下运行Redis并设置为开机自启的服务
  • 智慧城市建设方案
  • 小白的进阶之路系列之十四----人工智能从初步到精通pytorch综合运用的讲解第七部分
  • yaffs2目录搜索上下文数据结构struct yaffsfs_dirsearchcontext yaffsfs_dsc[] 详细解析
  • 10.MySQL索引特性
  • cv::FileStorage用法
  • Qt Creator工具编译器配置
  • Linux防火墙实战演练
  • 基于 PyTorch 的 VGG16 深度学习人脸识别检测系统的实现+ui界面
  • 机器学习的数学基础:线性模型
  • unix/linux,sudo,其高级使用
  • 在 Android 框架中,接口的可见性规则
  • Excel 透视表以及透视图应用(基础版)
  • 实验设计如何拯救我的 CEI VSR 28G 设计
  • 小说网站做编辑器/seo搜索是什么意思
  • 苏州软件开发公司哪家好/seo优化收费
  • 广西造建设工程协会网站/网络营销技巧培训
  • 专业网站建设好不好/建网站费用
  • 公司商标设计网站/免费个人推广引流平台
  • 网站怎样制作图文排版/百度官网