备战蓝桥杯Day1-哈希表

写笔记一是为了督促自己学习(要不真的一瘫瘫一天,学不了一点),

二是给自己的学习留下痕迹,以后再翻看起来,都是自己进步的痕迹,

三是为了再复习的时候好找,把题解分析整理一下,帮助自己理清思路,条理清晰。

如果有需要的就跟我一起打卡备战吧,欢迎一起评论讨论!!!

 

一、哈希表基础知识

哈希(Hash)是一种将任意长度的输入输入数据映射为固定长度输出数据的算法。

哈希表通常是通过字典(dict)来实现的。Python的字典是一种基于哈希表的数据结构,它使用哈希函数将键映射到存储值的位置。

以下是用字典的键值对实现哈希表的基本用法

# 创建哈希表 通过字典实现
hash_table = {}
# 插入键值对
hash_table['name'] = 'zhou'
hash_table['age'] = 22
hash_table['city'] = 'New York'

# 访问值
print(hash_table['name']) # 输出 zhou
print(hash_table['age'])  # 输出 22
print(hash_table['city']) # 输出 New York

# 检查键是否存在
if 'gender' in hash_table:
    print(hash_table['gender'])
else:
    print("key not found!")   # 输出 key not foud!

# 删除键值对
del hash_table['age']

# 遍历哈希表
for key, value in hash_table.items():
    print(f'{key}:{value}')

# 获取所有键或所有值
keys = list(hash_table.keys())
values = list(hash_table.values())

 二、练习题目

力扣中的题

 三、详细题解

大佬题解:

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        # 使用字典记录 magazine 中每个字符的出现次数
        char_count = {}
        for char in magazine:
            char_count[char] = char_count.get(char, 0) + 1

        # 遍历 ransomNote 中的字符,逐个减少字典中对应字符的次数
        for char in ransomNote:
            if char_count.get(char, 0) <= 0:
                # magazine 中没有足够的字符来构成 ransomNote
                return False
            char_count[char] -= 1

        # 所有字符都能在 magazine 中找到足够次数
        return True

作者:fdvoid0
链接:https://leetcode.cn/problems/ransom-note/solutions/2594634/python3gozi-dian-bian-li-zi-fu-xiang-xi-gkg8z/
来源:力扣(LeetCode)

代码解释:

def canConstruct(self, ransomNote: str, magazine: str) -> bool:

这段代码是一个 Python 类中的方法,名为 canConstruct。这个方法用于判断是否可以用杂志(magazine)中的字符构建勒索信(ransomNote

主要步骤如下:

  1. 创建一个空字典 char_count,用于统计每个字符在杂志中出现的次数。

  2. 使用一个循环遍历 magazine 中的每个字符,并将其出现次数记录在 char_count 中。

  3. 使用另一个循环遍历 ransomNote 中的每个字符,检查是否杂志中有足够的该字符以构建勒索信。如果缺少任何字符,方法返回 False;否则,返回 True

这个方法基于字符出现次数的比较,判断是否可以使用杂志中的字符构建勒索信。

 char_count[char] = char_count.get(char, 0) + 1

这行代码是用来统计一个字符串中每个字符出现的次数。

1. `char_count`: 这是一个字典(dictionary),用于存储每个字符和其出现次数的映射关系。

2. `[char]`: 这是字典中的键,表示当前处理的字符。

3. `char_count.get(char, 0)`: 这是一个字典的方法,用于获取字典中指定键(即字符)对应的值(即该字符出现的次数)。如果字典中不存在这个键,`get` 方法会返回默认值,这里默认值是 0。

4. `char_count[char] = char_count.get(char, 0) + 1`: 这一行代码的目的是将当前字符(char)添加到字典中,并将其对应的值(即出现次数)加一。如果字典中已经有这个字符的记录,就将其出现次数加一;如果字典中没有这个字符的记录,就将其记录为 1。

因此,这行代码实现了一个简单的字符计数功能。在处理一个字符串时,它会遍历字符串的每个字符,统计每个字符出现的次数,并将结果存储在字典 `char_count` 中。

 if char_count.get(char, 0) <= 0:

这行代码是在检查一个字符在杂志中的出现次数是否足够构建勒索信。

`char_count.get(char, 0)`: 这是字典 `char_count` 的方法,用于获取字典中指定键(即字符 `char`)对应的值(即该字符在杂志中的出现次数)。如果字典中不存在这个键,`get` 方法会返回默认值,这里默认值是 0

`<= 0`: 这是一个比较操作符,检查获取到的字符出现次数是否小于或等于零。

因此,整个条件语句的含义是,如果一个字符在杂志中的出现次数不足以构建勒索信(即出现次数小于或等于零),则条件成立。在这种情况下,代码块内的逻辑将执行,通常会导致返回 `False`,表明不能构建勒索信。如果字符的出现次数足够,条件不成立,继续检查下一个字符。

  char_count[char] -= 1

表示该字符已经使用过一次了,相应的出现次数要被减一。

四、总结

如果不用哈希表我觉得用 in 也可以,但是只能满足一些比较简单的测试用例,复杂的可能会报错,而且满足不了题目中每个字符只能用一次。所以还是好好学习哈希表的用法吧。先学习一下大佬的解法 ,慢慢的以后精进自己的功力吧哈哈哈哈。

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值