滑动窗口+哈希表:最小覆盖子串

python 复制代码
class Solution:
    def minWindow(self,s:str,t:str)->str:
        if len(s)==0 or len(t)==0:
            return ""
        if len(s)<len(t):
            return ""
        tcount={}
        window={}
        left=0
        need=0
        ansleft,ansright=0,-1  
        min_length=float("inf")  #初始化最小值为无穷大
        for i in t:  #先统计子串中各个字符的频次
            tcount[i]=tcount.get(i,0)+1
        for right,x in enumerate(s):  #开始遍历主串
            if x in tcount:  #若当前字符在tcount中,更新window窗口
                window[x]=window.get(x,0)+1
                if window[x]==tcount[x]:  #对比两个哈希表中的次数是否一致,若一致则匹配度加一
                    need+=1
            while need==len(tcount):  #当匹配度等于tcount长度时,说明匹配成功,需要收集答案
                if right-left+1<=min_length:  #当前长度小于min_length时,更新min_length
                    min_length=right-left+1
                    ansleft,ansright=left,right  #更新下标
                if s[left] in tcount:  #移动left指针前,先判断当前字符是否在tcount中
                    window[s[left]]-=1  #若在,需要先处理该字符,首先window对应频次减一
                    if window[s[left]]<tcount[s[left]]: #比较频次是否相等,若小于,匹配度减一
                        need-=1
                left+=1  #移动指针
        if ansright<0:  #判断是否更新过右边指针
            return ""
        return s[ansleft:ansright+1]  #切片返回最小子串

思想:滑动窗口+哈希表:首先用哈希表tcount统计子串的频次,其次开始遍历主串。先设定一个need用于记录匹配次数,开始遍历主串,对于每一个遍历到的字符,先判断是否在哈希表tcount中,如果在,就在哈希表window中频次加一,同时判断window窗口与tcount窗口关于该字符的次数是否相等,若相等,则匹配度need加一。当匹配度need等于哈希表tcount的长度时,表明此时完全匹配,可以开始收集答案并且移动左指针left。移动left时,需要判断left下标对应的字符是否存在于哈希表tcount中,若在,则window窗口对应字符的次数需要减一,然后再判断该字符在window和tcount中的次数是否一致,如果不一致(window<tcount),则匹配度need减一。循环结束后,先判断初始化的右指针是否更新过,若没有,则返回空字符串。若更新过,则返回切片。

相关推荐
sa100272 分钟前
淘宝商品详情 API 接口开发实战:item_detail 调用、参数与 Python 示例
linux·数据库·python
Dapenson44 分钟前
腾讯小龙虾WorkBuddy技能与插件深度解析
python·ai
无心水1 小时前
【常见错误】2、Java并发编程避坑指南:从加锁失效到死锁,10个案例教你正确使用锁
java·开发语言·python
困死,根本不会1 小时前
Python 连接 iBeacon 蓝牙设备超详细学习笔记
python·蓝牙服务·ibeacon
AI_56781 小时前
基于智优达平台的Python教学实践:从环境搭建到自动评测
开发语言·前端·人工智能·后端·python
挠头猴子1 小时前
一个数组去重,两个数组找不同或相同
数据结构·算法
怪侠_岭南一只猿1 小时前
爬虫阶段一实战练习题二:爬取当当网图书列表
css·爬虫·python·html
3DVisionary2 小时前
捕捉亚毫米级裂纹演化!DIC技术为裂纹扩展与抗裂研究带来全新方案
人工智能·python·3d·应变测量·金属3d打印·dic精度检验方法·各向异性
smchaopiao2 小时前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
Eward-an2 小时前
LeetCode 76. 最小覆盖子串(详细技术解析)
python·算法·leetcode·职场和发展