首页 > 编程语言 >leetcode算法热题--字母异位词组合

leetcode算法热题--字母异位词组合

时间:2024-04-30 14:57:05浏览次数:34  
标签:字母 -- 异位 复杂度 leetcode strs 哈希 字符串 热题

题目

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

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:

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

示例 2:

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

示例 3:

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

提示:

1 <= strs.length <= 10^4
0 <= strs[i].length <= 100
strs[i] 仅包含小写字母

解答

两个字符串互为字母异位词,当且仅当两个字符串包含的字母相同。我们可以通过对字符串进行排序,然后将排序后的字符串和原来的字符通过哈希表存起来,然后再遍历一遍哈希表输出。

代码实现
class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string, vector<string>> hash;
        for (auto str : strs) {
            string nstr = str;
            sort(nstr.begin(), nstr.end());
            hash[nstr].push_back(str);
        }

        vector<vector<string>> res;
        for (auto item : hash) res.push_back(item.second);
        return res;
    }
};
复杂度分析

时间复杂度:时间复杂度:O(nklog⁡k),其中 nstrs 中的字符串的数量,kstrs 中的字符串的的最大长度。需要遍历 n个字符串,对于每个字符串,需要 O(klog⁡k)的时间进行排序以及 O(1) 的时间更新哈希表,因此总时间复杂度是 O(nklog⁡k)

空间复杂度:O(nk),其中 nstrs中的字符串的数量,kstrs 中的字符串的的最大长度。需要用哈希表存储全部字符串。

标签:字母,--,异位,复杂度,leetcode,strs,哈希,字符串,热题
From: https://www.cnblogs.com/oyoy/p/18168010

相关文章

  • 代码修改pdf文件
    上篇说在python修改pdf上很费了些周张,效果却了了,看着网上连绵不绝的在线pdf编辑网站,疑是有钱赚的地不给草民磨推。其一,发现用记事本打印输出的pdf文件,用PyPDF2,pdfplumber,都是可以获取文本信息,并用replace方法修改,vscode其其它增强文本编辑器,用的也是MicrosoftPrinttoPDF,输出的......
  • 珠宝 (01背包,四边形不等式)
    \(01\)背包的trick。Link.做法\(1\)暴力背包。超时。做法\(2\)一个显然的性质就是,按\(c_i\)归类,先用价值大的。如果无法更新背包,直接退出循环即可。亲测能获得85pts的好成绩。时间复杂度同暴力背包。(理论)做法\(3\)如果你认真打了表,会发现如果从大往小放,那么最......
  • WPF SetProperty to implement compare,assign and notify
    protectedvoidSetProperty<T>(refTfield,Tvalue,[CallerMemberName]stringpropName=null){if(!EqualityComparer<T>.Default.Equals(field,value)){field=value;varhandler=PropertyChanged;if(handler!=nul......
  • 集成了高压初级侧开关,INN3649C-H606-TL、INN3678C-H606-TL、INN3676C-H601-TL 离线转
    1、详情InnoSwitch3-EP系列IC可极大简化低压大电流电源的开发和制造,尤其是那些采用紧凑外壳或需要满足高效率要求的电源。InnoSwitch的架构极具革新性,因为该器件同时将初级和次级控制器以及检测元件和符合安全标准的反馈机制集成到了单个IC中。装置整合了多种保护功能,包括线电压......
  • ffmpeg不同平台的一些编译脚本
    build-x86-64.sh:#!/bin/sh#编译后输出目录,在ffmpeg源码目录下的/android/arm64-v8aOUTPUT=$(pwd)/x86_64-linux/x64build(){./configure\--disable-x86asm\--prefix=$OUTPUT\--disable-static\--disable-debug\--disable-doc\--enable-shared\--en......
  • TypeScript入门5:模块化(导入导出)
    1.概述2.语法3.避免命名冲突4.默认导入导出......
  • simpread-课程 21:API 项目重构
    项目结构重构1.1Electric.DbMigrator存在的问题我们先来看下,后台API项目的目录结构。其中Electric.DbMigrator,这个项目作用是用来做数据库迁移的,但是同时也会被其他项目引用,还有这个项目类型还是WebAPI类型的。所以存在以下的几个问题:1、项目功能重合:数据库迁移和数......
  • CF1951I Growing Trees
    MyBlogsCF1951IGrowingTrees首先考虑确定了\(x_i\)如何判定是否合法。可以很容易的找出这样一个必要条件:\(\foralli,x_i\leqk\)。这是两个点的情况,考虑点数更多的情况。手玩之后可以推广到:对于任意导出子图,要求其内部的边数\(\leqk(|S|-1)\)。这个条件也是充分的,证明......
  • npm install报错提示证书过期CERT_HAS_EXPIRED
    npminstall报错提示证书过期CERT_HAS_EXPIREDnpm ERR! code CERT_HAS_EXPIREDnpm ERR! errno CERT_HAS_EXPIREDnpm ERR! request to https://registry.npm.taobao.org/xxx failed, reason: certificate has expired这个错误是由于您尝试连接的服务器上的SSL证......
  • 一文详解C++的vector
    vector是C++中使用频率最高的标准库,可以在程序运行时动态改变其大小(例如添加或删除元素),因此又被称为动态数组。使用时,用户无需在意底层内存管理的细节,因为它已经帮你做了这件事情。使用前需要导入<vector>头文件,以下是vector的常见用法:1.创建vectorvector用于保存一组同类型的......