leetcode 数据结构 探索哈希表
1、哈希表:哈希表
是一种使用哈希函数
组织数据,以支持快速插入和搜索的数据结构。通过选择合适的哈希函数,哈希表可以在插入和搜索方面实现出色的性能。
哈希表的关键思想是使用哈希函数将键映射到存储桶。
(1)哈希集合:集合
数据结构的实现之一,用于存储非重复值。
(2)哈希映射:映射
数据结构的实现之一,用于存储(key, value)
键值对。
哈希函数: y = x%5 (x是键值,y是桶的索引)
插入:通过哈希函数解析键,将它们映射到相应的桶中。
搜索:通过相同的哈希函数解析键,并仅在特定存储桶中搜索。
2、哈希集合的操作:add(value)
:向哈希集合中插入一个值;
remove(value)
:将给定值从哈希集合中删除。
3、哈希映射的操作: get(key)
:返回给定的键所对应的值,如果映射中不包含这个键, 返回None。
remove(key)
:如果映射中存在这个键,删除这个数值对。
练习题:(1)快乐数:
def ishappy(n): hashset = set() while True: n = sum([int(i)**2 for i in str(n)]) if n==1: return True elif n in hashset: return False else: hashset.add(n) n = 19 print(ishappy(n))
(2)词频计数
from collections import Counter def f(s): c = Counter( ) for char in s: c[char] +=1 return dict(c) s = "aabbc" print(f(s)
def f(s): dic ={} for char in s: if dic.get(char)==None: dic[char]=1 else: dic[char] +=1 return dic s = "aabbc" print(f(s))
(3)字符串无重复最长子串。
def f(s): dic = {} left = -1 temp = 0 for right in range(len(s)): if s[right] in dic: left = max(dic[s[right]],left) temp = max(temp, right-left) dic[s[right]] = right return temp s = "abcabcbb" print(f(s))
def f(s): hashset = set() n = len(s) #初始化右指针 right = -1 res = 0 for left in range(n): if left !=0: #左指针移动一格,移除一个字符 hashset.remove(s[left-1]) while right+1<n and s[right+1] not in hashset: hashset.add(s[right+1]) right +=1 res = max(res, right-left+1) return res s = "abcabcbb" print(f(s))