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))

 

posted @ 2020-06-22 21:58  jerrygogo  阅读(206)  评论(0编辑  收藏  举报