76. 最小覆盖子串 Leetcode Python 滑动窗口解法
2021-03-08 20:30
标签:star 滑动窗口 记录 art 条件 bsp nbsp 说明 字典 题目:给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。 示例 1: 输入:s = "ADOBECODEBANC", t = "ABC" 输入:s = "a", t = "a" 提示: 1 s 和 t 由英文字母组成 题解代码: 76. 最小覆盖子串 Leetcode Python 滑动窗口解法 标签:star 滑动窗口 记录 art 条件 bsp nbsp 说明 字典 原文地址:https://www.cnblogs.com/huangguifeng/p/14193704.html
输出:"BANC"
示例 2:
输出:"a"
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(rightlen(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 # 记录字串起始位置与长度
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]
下一篇:c 语言实现归并排序
文章标题:76. 最小覆盖子串 Leetcode Python 滑动窗口解法
文章链接:http://soscw.com/index.php/essay/61969.html