哈希表(Hash Table)
哈希表(Hash Table)是一种键值对(key-value)的高效数据结构。
核心特性
哈希表的核心特性:平均时间复杂度 O(1) 的增、删、查操作。
常见结构
- 纯哈希表(键值对哈希):标准的哈希实现,键唯一、值可任意。支持增/删/改/查操作。语言实现:Python dict、Java HashMap/Hashtable、JavaScript Map(推荐)/Object(简易版)、C++ unordered_map、Go map。
- 哈希集合:只存键、不存值的哈希表,利用键的唯一性实现去重,支持增/删/判操作。语言实现:Python set、Java HashSet、JavaScript Set、C++ unordered_set、Go 无内置 Set(可通过 map[T]struct{} 模拟,空结构体不占内存)。
当我们遇到了要快速判断一个元素是否出现在集合里的时候,就要考虑哈希法。哈希法牺牲了空间来换取时间,因为我们要使用额外的数组、set 或者是 map 来存放数据,才能实现快速的查找。
经典算法题
题目一:LeetCode 242. 有效的字母异位词
字母异位词的核心判断条件:
- 两个字符串长度必须相等(剪枝:长度不同之间 return False)
- 两个字符串中每个字符出现的频率完全一致
思路一:可以对两个字符串分别进行排序,然后再比较两个字符串是否相等,时间复杂度为 O(n log n)。
思路二:实际上,判断字符串 t 是否是 s 的字母异位词,只需要判断相同字母出现的次数是否相同即可。由于字符串只包含 26 个小写字母,我们可以用一个长度为 26 的数组记录 s 中字母出现的频次,然后再遍历 t 去抵消对应频次,最终若所有字符频率都为 0,就 return True。
def isAnagram(self, s: str, t: str) -> bool:
if len(s) != len(t):
return False
record = [0] * 26
for char in s:
record[ord(char) - ord('a')] += 1
for char in t:
record[ord(char) - ord('a')] -= 1
if record[ord(char) - ()] < :

