• 76. 最小覆盖子串 Leetcode Python 滑动窗口解法


    题目:给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。

    注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。

    示例 1:

    输入:s = "ADOBECODEBANC", t = "ABC"
    输出:"BANC"
    示例 2:

    输入:s = "a", t = "a"
    输出:"a"
     

    提示:

    1 <= s.length, t.length <= 105
    s 和 t 由英文字母组成

    题解代码:

    class Solution:
        def minWindow(self, s: str, t: str) -> str:
            need = {}   # t 中字符个数转化为dict
            window = {}   # 记录窗口数据
    
            # 初始化需要的结果字典
            for i in t:
                if  i in need:
                    need[i]+= 1
                else:
                    need[i] = 1
    
            left,right = 0,0 # 两个指针
            valid = 0  # 记录有多少个符合t字符串的字符进入到了窗口中
    
            start,lenght = 0 , float("inf") # 初始化结果, start 表示字串开始,lenght表示最短子串个数
            while(right<len(s)):
                s_str = s[right]
                right += 1
                if s_str not in window:
                    window[s_str] = 1
                else:
                    window[s_str] += 1
                if s_str in  need:
                    if window[s_str] == need[s_str]: # windows 中记录的个数与need 中记录的个数相等,说明这个字符已经满足条件
                        valid += 1 
               
                # 当valid == len(need) 之后开始left 开始右移动,减小窗口
                while (valid == len(need)):
                  
                    if  right - left < lenght : # 记录字串起始位置与长度
                        start = left
                        lenght = right - left
                        
                    d = s[left];
                    left+=1   # left 右移
                    if d in need:
                        if (window[d] == need[d]):  # 如果移出去的字符刚好符合need 则left 右移后字串不符合条件。
                            valid -=1
                        window[d] -= 1 # 在窗口中将移出去的字符数减1
          
            return ""  if lenght == float("inf") else s[start:lenght+start]
    
                    
  • 相关阅读:
    oldboy_python_bankSystem practice
    【HCIE-RS复习】- PPP
    【HCIE-RS】PPP详解
    【HCIE-RS】考试说明
    【HCIE-RS】杭州考场(个人考试心得体会)
    DataWorks功能实践速览 05——循环与遍历
    Serverless 工程实践 | 零基础上手 Knative 应用
    前后端、多语言、跨云部署,全链路追踪到底有多难?
    多任务多目标CTR预估技术
    开放搜索查询分析服务架构解读
  • 原文地址:https://www.cnblogs.com/huangguifeng/p/14193704.html
Copyright © 2020-2023  润新知