我可以不吃啊 发表于 2024-12-4 20:08:14

LeetCode 力扣 热题 100道(十一)字母异位词分组(C++)

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意次序返回结果列表。
字母异位词 是由重新排列源单词的全部字母得到的一个新单词。
https://i-blog.csdnimg.cn/direct/a9d050f3145f40d7a5db8aab1d264666.png


[*]排序字符:对于每个字符串,我们将其字符排序,得到一个唯一的 "排序后的字母" 作为该字符串的标识符(key)。
[*]使用哈希表:利用哈希表(unordered_map)来将排序后的字母作为键(key),将相同字母异位词的字符串作为值(value)。假如两个字符串排序后得到相同的结果,它们属于同一组。
[*]终极结果:哈希表中存储了多个键值对,其中每个键对应的值是一个字母异位词列表。
class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
      unordered_map<string, vector<string>> anagrams;
      for (const string& str : strs) {
            string sorted_str = str;
            sort(sorted_str.begin(), sorted_str.end());
            anagrams.push_back(str);
      }
      vector<vector<string>> result;
      for (auto& pair : anagrams) {
            result.push_back(pair.second);
      }

      return result;
    }
};


[*] unordered_map<string, vector<string>> anagrams;:使用哈希表 anagrams 来存储字母异位词。键是排序后的字符串,值是一个包罗全部字母异位词的字符串数组。
[*] 遍历每个字符串:

[*]对每个字符串 str,我们创建它的副本 sorted_str。
[*]使用 sort() 函数对 sorted_str 进行排序。
[*]将排序后的 sorted_str 作为哈希表的键,原字符串 str 被添加到相应的值(即字母异位词组)中。

[*] 提取结果:

[*]哈希表中的每个值都是一个字母异位词的组,我们将全部这些组收集到 result 数组中并返回。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: LeetCode 力扣 热题 100道(十一)字母异位词分组(C++)