首页 > 其他分享 >leetcode hot100-02 字母异位词分组

leetcode hot100-02 字母异位词分组

时间:2023-11-12 16:46:27浏览次数:37  
标签:02 str temp 异位 dic hot100 key leetcode itemstr

题目:字母异位词分组

难度:中等

地址:https://leetcode.cn/classic/problems/group-anagrams/description/

描述:给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

过程:

  1、首先啥叫异位词:

     按定义就是两个字符串里的字符去重之后应该完全一样,同时字符的数量也应该一样。说不清楚,直接举例:

     abc,cab ,都为a、b、c组成,且a、b、c的数量一样,为异位词

     abbc,bac,都为a、b、c组成,但是b字母的数量不一样,不是异位词

  2、解题,将异位词分组到一起

     如果不是分组异位词,是分组一个班的学生。可以按男女分、出生月份分、居住的街道分,总之就是有一个共同的特性。

     假设,互为异位词有一个通通属性,可以通过fn(x)获取,那就简单了,我就用一个字典直接进行分组

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        temp_dic = {}
        for itemstr in strs:
            key_str = fn(itemstr)
            if key_str in temp_dic:
                temp_dic[key_str].append(itemstr)
            else:
                temp_dic[key_str] = [itemstr]
        return list(temp_dic.values())

      那么,互为异位词他们的共同属性是啥呢?前面我们有解释啥为异位词

        1、他们有相同的字母组成6

        2、字母的数量相同

      所以,这两个字符串排序后肯定是一样的,那么直接用python默认排序就完事儿。 

      我也这么试过了,确实可以,但是感觉逼格不够高,既然是解算法题,还是不要这么直给,毕竟一般练算法都是为了面试,普通        人谁看算法,得让面试官觉着,没那么直球。

      除了排序一样,还有啥一样?

      都是26个字母,假设有一个26长度的数组,代表a~z,每个位置代表当前字母的数量,那互为异位词的数组是不是也是一样的,我按照这个思路也来了一遍

      

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        temp_dic = {}
        for itemstr in strs:
            key_list = [0]*26
            for c in itemstr:
                key_list[ord(c)-ord('a')] += 1
            key_str = ','.join(map(str, key_list))
            if key_str in temp_dic:
                temp_dic[key_str].append(itemstr)
            else:
                temp_dic[key_str] = [itemstr]
        return list(temp_dic.values())

      里面其实可以优化的,python中,元祖是可以作为key的,直接讲数组作为key,同时可以定义一样默认数组的字典,就不需要else判断了

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        temp_dic = collections.defaultdict(list)
        for itemstr in strs:
            key_list = [0]*26
            for c in itemstr:
                key_list[ord(c)-ord('a')] += 1
            temp_dic[tuple(key_list)].append(itemstr)
            # if key_str in temp_dic:
            #     temp_dic[key_str].append(itemstr)
            # else:
            #     temp_dic[key_str] = [itemstr]
        return list(temp_dic.values())

      再给一个go的实现,注意go的数组是可以作为key的,但是切片不行

 1 func groupAnagrams(strs []string) [][]string {
 2 
 3     tempDic := make(map[[26]int][]string)
 4     for _, str := range strs {
 5         keylist := [26]int{}
 6         for _, c := range str {
 7             keylist[c-'a']++
 8         }
 9         tempDic[keylist] = append(tempDic[keylist], str)
10 
11     }
12     reResult := make([][]string, 0)
13     for _, v := range tempDic {
14         reResult = append(reResult, v)
15 
16     }
17     return reResult
18 
19 }

 

标签:02,str,temp,异位,dic,hot100,key,leetcode,itemstr
From: https://www.cnblogs.com/rubeitang/p/17827370.html

相关文章

  • 2023-2024-1 学号20231315第七周学习总结
    学期:2023-2024-1学号:20231315《计算机基础与程序设计》第七周学习总结作业信息这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业要求在哪里2023-2024-1《计算机基础与程序设计》这个作业的目标学习计算机科学概论第8章和《C语言程序设计》第6......
  • 2023.11.12日报
    今天主要在做大数据实验三,有个问题记录一下代码如下packageTest3;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.*;importorg.apache.hadoop.hbase.client.*;importorg.apache.hadoop.hbase.util.Bytes;importjava.io.IOException;p......
  • 20211314王艺达 学习笔记9
    第六章信号和信号处理摘要本章讲述了信号和信号处理;介绍了信号和中断的统一处理,有助于从正确的角度看待信号;将信号视为进程中断,将进程从正常执行转移到信号处理;解释了信号的来源,包括来自硬件、异常和其他进程的信号;然后举例说明了信号在Unix/Linux中的常见用法;详细解释了Unix/L......
  • 2023-2024-1 20211327 信息安全系统设计与实现 学习笔记9(必做)
    学习笔记9信号和中断Unix/Linux中的信号处理信号处理步骤与异常Linux中的IPC实践过程信号和中断“中断”是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。“信号”是发送给进程的请求,将进程从正常执行转移到中断处理。中断的概念和机制......
  • leetcode hot 100-01 两数之和
    题目:两数之和难度:简单题目地址:https://leetcode.cn/classic/problems/two-sum/description/过程一,因为难度是简单,就没有仔细审题,以为返回两个数就好,使用双指针,逻辑如下:对数组排序双指针分别指向头和尾两数之和大于target,尾部指针-1两数之......
  • 20232329易杨文轩《网络》第一周学习总结
    学期2023-2024-1学号20232329《#学期2023-2024-1学号20232329《网络》第一周学习总结教材学习内容总结教材学习中的问题和解决过程-问题一:现代网络空间安全已经做到完美了吗,是否还有缺陷?-问题一解决方案:现代网络空间安全尚未达到完美状态,仍然存在许多缺陷和挑战。一......
  • 20211105李宜时信息安全系统设计与实现学习笔记9
    信号和信号处理包括信号和中断1.信号和中断的基础定义和概述:解释信号在操作系统中的作用,它们如何与中断相关。信号类型:列出常见的UNIX/Linux信号,例如SIGINT,SIGTERM,SIGKILL等。2.UNIX/Linux信号示例实例演示:通过实际示例展示信号如何工作。代码段:提供简单的代......
  • 2023强网拟态crypto-一眼看出
    1、题目信息一眼看穿查看代码 fromCrypto.Util.numberimport*fromsecretimportflagimportgmpy2flag=b''r=getPrime(6)a=1100124079130849656541177384550975435259748146428827269932523139547213714461077464537281214967514136060046964049287422354......
  • 2023-2024-1 20232303 《网络空间安全导论》第10周学习总结
    2023-2024-120232303《网络空间安全导论》第10周学习总结教材学习内容总结教材学习中的问题和解决过程问题一:对书上关于系统安全和信息系统中“系统”的区别不是很清楚。问题一解决方案:询问AI工具基于AI的学习参考资料《网络空间安全导论》感悟网络空间安全学科......
  • 2023-2024-1 20232401 《网络》第1周学习总结
    教材内容学习总结网络空间安全导论第一章思维导图教材学习中的问题和解决过程问题1:不了解markdown语法解决方案:查了知乎问题2:xmind不会用解决方案:查了知乎和b站基于AI的学习参考资料+《网络空间安全导论》......