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

reLeetCode 热题 100-2 字母异位词分组 - MKT

 

自己的答案

class Solution {
public:std::map<char,int> GetStringMap(string msg_){std::map<char,int> charMap;for(char c : msg_){charMap[c]++;}// std::cout<< "单词组成: "<< msg_ << "  ||   "; // for(auto &pair:charMap){//   std::cout<<pair.first <<'/' <<pair.second << " " ;// }// std::cout << std::endl;return charMap;}vector<vector<string>> groupAnagrams(vector<string>& strs) {std::multimap<std::map<char,int>, std::string> m_map;// for (const auto& element : vec) {//     std::cout << element << " ";// }for (auto i=0;i< strs.size();++i){string mgs_=strs[i];std::map<char,int> map_i = GetStringMap(mgs_);auto  it= m_map.find(map_i);//  if(it !=m_map.end()){//    std::cout<< "存在" <<std::endl;//  }//  else{//    std::cout<< "不存在" <<std::endl;//  }// m_map.insert(std::make_pair(map_i,mgs_));m_map.insert({map_i,mgs_});}//std::multimap<std::map<char,int>, std::string> m_map;std::vector<std::vector<string>> result;for(auto mmap_i = m_map.begin(); mmap_i != m_map.end();){// for( auto &mmap_i : m_map){//std::cout<< "字符:"<< mmap_i.second <<std::endl;auto range = m_map.equal_range(mmap_i->first);std::vector<string> i_string;for (auto rangeIt = range.first; rangeIt != range.second; ++rangeIt) {//std::cout<< "字符:"<< rangeIt->second <<' ';i_string.push_back(rangeIt->second);}// std::cout <<std::endl;result.push_back(i_string);mmap_i=range.second;}return result;}
};

  

官方答案 1排序

class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string, vector<string>> mp;for (string& str: strs) {string key = str;sort(key.begin(), key.end());mp[key].emplace_back(str);}vector<vector<string>> ans;for (auto it = mp.begin(); it != mp.end(); ++it) {ans.emplace_back(it->second);}return ans;}
};作者:力扣官方题解
链接:https://leetcode.cn/problems/group-anagrams/solutions/520469/zi-mu-yi-wei-ci-fen-zu-by-leetcode-solut-gyoc/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  

方法二:计数
由于互为字母异位词的两个字符串包含的字母相同,因此两个字符串中的相同字母出现的次数一定是相同的,故可以将每个字母出现的次数使用字符串表示,作为哈希表的键。

由于字符串只包含小写字母,因此对于每个字符串,可以使用长度为 26 的数组记录每个字母出现的次数。需要注意的是,在使用数组作为哈希表的键时,不同语言的支持程度不同,因此不同语言的实现方式也不同。

作者:力扣官方题解
链接:https://leetcode.cn/problems/group-anagrams/solutions/520469/zi-mu-yi-wei-ci-fen-zu-by-leetcode-solut-gyoc/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {// 自定义对 array<int, 26> 类型的哈希函数auto arrayHash = [fn = hash<int>{}] (const array<int, 26>& arr) -> size_t {return accumulate(arr.begin(), arr.end(), 0u, [&](size_t acc, int num) {return (acc << 1) ^ fn(num);});};unordered_map<array<int, 26>, vector<string>, decltype(arrayHash)> mp(0, arrayHash);for (string& str: strs) {array<int, 26> counts{};int length = str.length();for (int i = 0; i < length; ++i) {counts[str[i] - 'a'] ++;}mp[counts].emplace_back(str);}vector<vector<string>> ans;for (auto it = mp.begin(); it != mp.end(); ++it) {ans.emplace_back(it->second);}return ans;}
};作者:力扣官方题解
链接:https://leetcode.cn/problems/group-anagrams/solutions/520469/zi-mu-yi-wei-ci-fen-zu-by-leetcode-solut-gyoc/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  

http://www.wxhsa.cn/company.asp?id=677

相关文章:

  • 分布式id
  • ipad装windows系统模拟器
  • [Java/SQL/Utils] SQL注释清除工具:SqlCommentStripper
  • 大模型面试题
  • CF2021D 题解 | dp
  • Caffeine缓存
  • Spark面试题清单
  • RocketMQ知识点梳理
  • Tekla坐标定位插件源码
  • 记录 使用PsExec启动System权限的WPF 程序
  • std::map的基本用法
  • 力扣20题 有效的括号
  • 2025年9月10日学习笔记之keil软件仿真调试
  • MySQL的explain使用
  • 力扣19题 删除链表的倒数第N个结点
  • 基于LZO的无损数据压缩IP,高性能压缩速率32Gbps,适用于FPGAASIC
  • IDEA创建文件时如何自动生成头部文档注释(简单、实用)
  • 一文带你吃透Power Platform,开启低代码开发新世界
  • docker compose 启动 redis 服务
  • MBR引导的OS Bootloader遇到被bios无视引导(自动重启)的解决办法
  • #java作业
  • 【Qt6】qt6下载地址
  • QOJ1838 Intellectual Implementation 题解
  • OpenSSH漏洞修复
  • 力扣15题三数之和
  • some plan
  • 利用废弃硬件中的零日漏洞:从Netgear路由器到BitDefender盒子的攻击链分析
  • ECT-OS-JiuHuaShan框架:自然规律的具象化智能体(附《易经》类比解析)
  • 力扣第5题最长回文子串
  • 用 Python 和 PaddleOCR 进行验证码识别