【代码随想录 | Leetcode | 第八天】哈希表 | 有效的字母异位词 | 两个数组的交集 | 两数之和
发布人:shili8
发布时间:2025-02-01 17:19
阅读次数:0
**第八天:哈希表**
今天,我们将学习如何使用哈希表来解决 LeetCode 上的一个问题:有效的字母异位词。
###有效的字母异位词给定两个字符串 `s1` 和 `s2`,判断是否为有效的字母异位词。有效的字母异位词是指两个字符串中所有字符都相同,而不考虑它们的顺序。
#### 示例:
* 输入:`s1 = "anagram", s2 = "nagaram"`
输出:`True`
* 输入:`s1 = "rat", s2 = "car"`
输出:`False`
### 解决方案我们可以使用哈希表来解决这个问题。具体来说,我们可以将 `s1` 中的每个字符作为键,值为该字符在 `s1` 中出现的次数。
from collections import Counterdef isAnagram(s1, s2): # 将 s1 和 s2 转换为小写 s1 = ''.join(sorted(s1.lower())) s2 = ''.join(sorted(s2.lower())) # 使用哈希表统计每个字符的出现次数 counter1 = Counter(s1) counter2 = Counter(s2) # 比较两个哈希表 return counter1 == counter2# 测试print(isAnagram("anagram", "nagaram")) # Trueprint(isAnagram("rat", "car")) # False
在这个解决方案中,我们首先将 `s1` 和 `s2` 转换为小写,然后使用 `sorted()` 函数对它们进行排序。这样可以确保两个字符串中的字符顺序相同。
接下来,我们使用 `Counter()` 函数创建一个哈希表,统计每个字符在 `s1` 中出现的次数。
最后,我们比较两个哈希表。如果它们相等,则返回 `True`;否则返回 `False`.
###两数之和给定一个数组 `nums` 和一个目标值 `targetSum`,找到两个数字的下标,使得它们的和等于 `targetSum`。
#### 示例:
* 输入:`nums = [2,7,11,15], targetSum =9`
输出:`[0,1]`
### 解决方案我们可以使用哈希表来解决这个问题。具体来说,我们可以将 `nums` 中的每个数字作为键,值为该数字在 `nums` 中出现的次数。
from collections import Counterdef twoSum(nums, targetSum): # 使用哈希表统计每个数字的出现次数 counter = Counter(nums) # 遍历 nums for i in range(len(nums)): # 计算剩余数字的和 remainingSum = targetSum - nums[i] # 检查是否存在匹配的数字 if remainingSum in counter and counter[remainingSum] >0: return [i, nums.index(remainingSum)] # 如果找不到匹配的数字,则返回空列表 return [] # 测试print(twoSum([2,7,11,15],9)) # [0,1]
在这个解决方案中,我们首先使用 `Counter()` 函数创建一个哈希表,统计每个数字在 `nums` 中出现的次数。
接下来,我们遍历 `nums`,并计算剩余数字的和。如果该和存在于哈希表中,并且其值大于0,则返回两个数字的下标。
最后,如果找不到匹配的数字,则返回空列表。
### 总结在本文中,我们学习了如何使用哈希表来解决 LeetCode 上的一个问题:有效的字母异位词和两数之和。我们通过创建一个哈希表,统计每个字符或数字出现的次数,然后比较两个哈希表来实现这些功能。
这些解决方案展示了哈希表在解决 LeetCode问题中的强大能力,可以帮助你高效地完成各种编程任务。