49 字母异位词分组

16 篇文章 0 订阅
6 篇文章 0 订阅
该博客介绍了如何利用哈希表在O(n)的时间复杂度和O(n)的空间复杂度内,将给定字符串数组中的字母异位词进行分组。通过排序每个单词的字符并将其作为哈希表的键,可以有效地找到所有字母异位词的组合。示例展示了对于不同输入,如空字符串和单个字符,算法的正确输出。
摘要由CSDN通过智能技术生成

题目

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

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

示例 1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]

示例 2:
输入: strs = [""]
输出: [[""]]

示例 3:
输入: strs = [“a”]
输出: [[“a”]]

  • 哈希
class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map <string, vector<string> > group;//哈希表
        vector<vector<string>> resu;//结果向量
        //遍历向量对每一个单词排序,并将单词加入到哈希表中
        for(int i=0; i<strs.size(); i++){
            string tmp = strs[i];
            sort(tmp.begin(), tmp.end());
            group[tmp].push_back(strs[i]);
        }
        //遍历哈希表,将哈希表中的单词转移到向量中
        for(auto it = group.begin(); it!=group.end(); it++){
            resu.push_back(it->second);
        }
        return resu;
    }
};
  • 时间复杂度O(n)
  • 空间复杂度O(n)
  • 思路
    • 判断单词是否为一组,只需判断它们按字典序排序后是否相同
    • 用一个哈希表储存每组单词,键为排序后的单词,值为排序前的单词。第一遍遍历向量,将单词排序后的结果添加到哈希表中。
    • 第二次遍历哈希表,将哈希表中每一组添加到二维向量中
    • 返回二维向量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值