day 6 哈希表基础结构应用

本篇文章讲解一下哈希表最基本的应用
哈希表主要有三种,分别是数组,set,map,在python中是list,set和字典
本文分别介绍这三种方法在题目中的应用
总结一下,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。
如果需要判断一个元素是否出现过的场景也应该第一时间想到哈希法。哈希表尤其在不需要考虑顺序只需要考虑是否出现,是否一致,是否存在的时候
242.有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true
示例 2: 输入: s = “rat”, t = “car” 输出: false

  1. 数组解法
    数组解法存在限制,因为数组是连续的,因此如果题目所给待存储内容较大,无法使用数组,如变量范围在0-2的32次方,如果存储2的32次方在数组中,就要建立这么大的一个数组,显然是不现实的,因此数组适合较小的取值范围,如果过大就需要用字典
1.	class Solution:
2.	    def isAnagram(self, s: str, t: str) -> bool:
3.	        record1=[0]*26
4.	        record2=[0]*26
5.	        for i in s:
6.	            record1[ord(i)-ord("a")]+=1
7.	        for i in t:
8.	            record2[ord(i)-ord("a")]+=1   
9.	        return record1==record2

因为题目给了限定是小写,因此数目局限在26个以内,可以使用数组,只是需要把字符串以数字形式代表,方便存储,比如record[0]=2 意思就是有两个a
2. 字典解法
数组解法限制较多,只能存储数字,并且范围还不能太多,那么字典没有这么多要求,python中字典可以直接使用函数Counter,自动把输入转换成字典形式的结构,也可以手动一个个输入,接下来分别展示这两种方法

Counter函数
1.	class Solution:
2.	    def isAnagram(self, s: str, t: str) -> bool:
3.	        n1=Counter(s)
4.	        n2=Counter(t)
5.	        return n1==n2

直接建立字典{}

1.	class Solution:
2.	    def isAnagram(self, s: str, t: str) -> bool:
3.	        a={}
4.	        for i in s:
5.	            if i in a:
6.	                a[i]+=1
7.	            else:
8.	                a[i]=1
9.	        for i in t:
10.	            if i in a:
11.	                a[i]-=1
12.	            else:
13.	                return False
14.	        for i in a:
15.	            if a[i] !=0:
16.	                return False
17.	        return True

当然也可以建立两个字典直接比较是否相等,就不需要循环判断了,时间换空间
3. set
对于set的使用,我们用另一道题目来分析
349. 两个数组的交集
题意:给定两个数组,编写一个函数来计算它们的交集。
在不需要考虑该元素出现次数的时候,set更合适,因为set自动过滤掉了重复的元素,set内的所以元素都是不相同的

  1. class Solution:
  2.  def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
    
  3.      res=[]
    
  4.      nu1=set(nums1)
    
  5.      nu2=set(nums2)
    
  6.      for i in nu1:
    
  7.          if i in nu2:
    
  8.              res.append(i)
    
  9.      return res
    
  10.     #return list(nu1&nu2)
    

Set集合还可以取交集,十分方便

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值