当前位置: 首页 > news >正文

LeetCode100-76最小覆盖子串

本文基于各个大佬的文章

上点关注下点赞,明天一定更灿烂!


前言

        Python基础好像会了又好像没会,所有我直接开始刷leetcode一边抄样例代码一边学习吧。本系列文章用来记录学习中的思考,写给自己看的,也欢迎大家在评论区指导~

        您的每一条评论都会让我更有学习的动力。


一、分析题目

这个题可以稍微参考一下LeetCode100-3无重复字符的最长子串(滑动窗口)-CSDN博客

这个题目当时借助了哈希表和窗口函数

二、思路以及代码

思路:利用可变滑动窗口技术,同时用哈希表记录t中字符的频率和窗口中字符的频率

我不会,还是借助一下科技手段把。

from collections import defaultdict
def minWindow(s: str, t: str) -> str:# 边界条件处理if not s or not t or len(s) < len(t):return ""# 构建t的字符频率哈希表target_count = defaultdict(int)for char in t:target_count[char] += 1# 窗口字符频率哈希表window_count = defaultdict(int)# 需要满足的字符种类数required = len(target_count)# 当前满足条件的字符种类数satisfied = 0# 左右指针left = 0# 最小窗口的起始索引和长度min_start, min_length = 0, float('inf')# 右指针遍历sfor right in range(len(s)):char = s[right]window_count[char] += 1# 如果当前字符是目标字符且数量达到要求,增加satisfiedif char in target_count and window_count[char] == target_count[char]:satisfied += 1# 当窗口包含t所有字符时,尝试缩小窗口while satisfied == required and left <= right:# 更新最小窗口current_length = right - left + 1if current_length < min_length:min_length = current_lengthmin_start = left# 移动左指针,缩小窗口left_char = s[left]window_count[left_char] -= 1# 如果左指针字符是目标字符且数量不再满足要求,减少satisfiedif left_char in target_count and window_count[left_char] < target_count[left_char]:satisfied -= 1left += 1# 返回最小窗口或空字符串return s[min_start:min_start + min_length] if min_length != float('inf') else ""

运行成功咯

三、本题收获

defaultdict 是 Python 的 collections 模块中提供的一个字典类。它与普通的字典 (dict) 非常类似,但有一个关键的区别:当访问一个不存在的键时,defaultdict 不会抛出 KeyError 异常,而是会调用一个工厂函数来为该键提供一个默认值。

from collections import defaultdict# 创建 defaultdict,需要传入一个工厂函数作为参数
# 工厂函数负责为不存在的键生成默认值# 示例 1: 默认值是整数 0
d = defaultdict(int)  # int() 的默认值是 0# 示例 2: 默认值是列表 []
d = defaultdict(list)  # list() 的默认值是 []# 示例 3: 默认值是字符串 ""
d = defaultdict(str)  # str() 的默认值是 ""# 示例 4: 使用自定义的工厂函数
def my_default_value():return "default value"d = defaultdict(my_default_value)


总结

        只会打暴力,基础一团糟,明天再学吧老铁,别真学会了。

http://www.dtcms.com/a/344606.html

相关文章:

  • C++ 面向对象之继承
  • 【DataGrip】连接达梦数据库后,能查询数据但是看不到表的几种情况分析,达梦数据库驱动包下载DmJdbcDriver18.jar
  • Leetcode—120. 三角形最小路径和【中等】(腾讯校招面试题)
  • LeetCode100-53最大子数组和
  • 数据工程师——ETL
  • 开发避坑指南(35):mybaits if标签test条件判断等号=解析异常解决方案
  • 【Protues仿真】基于AT89C52单片机的LCD液晶显示屏显示控制
  • 基于单片机的电子血压计设计方案
  • 亚信科技Java 150道面试题及参考答案(上)
  • DS 0 | 数据结构学习:前言
  • 使用隧道(Tunnel)连接PostgreSQL数据库(解决防火墙问题)
  • CentOS 10安装Ollama
  • Redis高级篇 | 分布式缓存四大核心问题讲解:持久化、主从集群、哨兵与分片集群
  • 【Java后端】【可直接落地的 Redis 分布式锁实现】
  • Python数据治理实战从爬虫到情感分析的电商评论处理系统
  • MySQL 高级主题:索引优化、ORM 与数据库迁移
  • java8 findAny()、findFirst()空指针NullPointerException问题
  • [RestGPT] RestGPT智能体
  • 从零开始的云计算生活——第四十九天,长路漫漫,kubernetes模块之持久化存储
  • 计算机网络技术-第七章
  • 嵌入式学习 day57 驱动-驱动框架
  • 利用 PHP 爬虫获取淘宝商品描述实战指南
  • 全志T113学习记录
  • 渲染新纪元:人工智能如何重构数字内容生产流水线
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘uvicorn’问题
  • EMNLP 2025数据公布,投稿量首次突破8000
  • 【AGI使用教程】GPT-OSS 本地部署(1)
  • Java StringBuilder 深度解析
  • c++的可扩展性方法
  • 20250822:从梦中云南到现实调试:海康球机 API 小故障排查