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

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.xdnf.cn/news/18501.html

相关文章:

  • 数据库备份sql文件过大,phpAdmin无法执行Sql
  • Python递归下降解析器深度解析:从原理到工程实践
  • 异常值检测:孤立森林模型(IsolationForest)总结
  • Flowise 任意文件上传漏洞 含Flowise Docker安装、漏洞复现(CVE-2025-26319)
  • 如何使用 DeepSeek 助力工作:全面指南​
  • AWS OpenSearch 是什么
  • ROS2下YOLO+Moveit+PCL机械臂自主避障抓取方案
  • 如何理解AP服务发现协议中“如果某项服务需要被配置为可通过多个不同的网络接口进行访问,则应为每个网络接口使用一个独立的客户端服务实例”?
  • Unreal Engine APawn 与 ACharacter 比较
  • 停车场道闸的常见形式
  • Docker的安装
  • 什么是数据分类分级?数据分类分级技术实现路径及产品推荐
  • 逆向代码笔记
  • centos7安装oracle19c流程(自用)
  • 全面解析 `strchr` 字符串查找函数
  • 闲置笔记本链接硬盘盒充当Windows NAS 网易UU远程助力数据读取和处理
  • vivo招AI架构专家(AI Agent方向)
  • 云原生(Cloud Native)技术概述
  • 密码管理中硬编码密码
  • react的基本使用
  • 【学习记录】structuredClone,URLSearchParams,groupBy
  • 树莓派采集、计算机推理:基于GStreamer的YOLOv5实现方案
  • 隧道代理无需手动获取IP的核心机制与技术优势
  • 纯手撸一个RAG
  • SSM从入门到实战: 2.6 MyBatis缓存机制与性能优化
  • skywalking-agent与logback-spring.xml中的traceId自动关联的原理
  • 三,设计模式-抽象工厂模式
  • 深入解析TCP/UDP协议与网络编程
  • Leetcode—120. 三角形最小路径和【中等】(腾讯校招面试题)
  • SSM框架基础知识-Spring-Spring整合MyBatis