LeetCode 49. 字母异位词分组

49. 字母异位词分组

Medium

题目描述:

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

输入: strs = [""]
输出: [[""]]

示例 3:

输入: strs = ["a"]
输出: [["a"]]

解题思路:

有多种方法可以解决这个问题,其中一种常见的方法是使用哈希表(unordered_map)来存储每个单词的排序后的字符串作为键,对应的异位词列表作为值。

具体的步骤如下:

  1. 创建一个空的哈希表(unordered_map)和一个空的结果列表(vector)。
  2. 遍历字符串数组中的每个单词,对每个单词进行排序(sort),得到排序后的字符串(tmpstr)。
  3. 将原单词追加到哈希表中以排序后的单词为键的值列表中,如果不存在该键,则自动创建一个新的项 map[tmpstr].push_back(strs[i]);
  4. 遍历哈希表中的每个项,将每个值列表添加到结果列表中 result.push_back(v.second);
  5. 返回结果列表。

代码实现:

#include 
#include 
#include 
#include 
#include 
using namespace std;

class Solution {
public:
    vector> groupAnagrams(vector& strs) {
        vector> result;  // 定义一个空的结果列表
        unordered_map> map;  // 定义一个空的哈希表
        for (int i = 0; i < strs.size(); i++) {  // 遍历字符串数组中的每个单词
            auto tmpstr = strs[i];  // 复制原单词
            sort(tmpstr.begin(), tmpstr.end());// 对单词进行排序
            map[tmpstr].push_back(strs[i]);// 将原单词追加到哈希表中以排序后的单词为键的值列表中,如果不存在该键,则自动创建一个新的项
        }
        for (const auto& v : map)// 遍历哈希表中的每个项,将每个值列表添加到结果列表中
        {
            result.push_back(v.second);
        }
        return result;// 返回结果列表
    }
};

你可能感兴趣的:(LeetCode,算法,数据结构,leetcode)