题解 | #最小覆盖子串#
最小覆盖子串
https://www.nowcoder.com/practice/c466d480d20c4c7c9d322d12ca7955ac
class Solution: def minWindow(self , S: str, T: str) -> str: # 检查是否所有的元素都包含在滑动窗口内 def check(hash): for _, val in hash.items(): if val < 0: return False return True left = 0 right = 0 res = "" hash = {} count = len(S) for i in range(len(T)): if T[i] in hash: hash[T[i]] -= 1 else: hash[T[i]] = -1 while right < len(S): if S[right] in hash: hash[S[right]] += 1 while check(hash): if count > right-left: count = right - left res= S[left:right+1] if S[left] in hash: hash[S[left]] -= 1 left += 1 right += 1 return res
解题思路
- 先构建一个哈希表,让所有的元素的值为负数;
- 遍历S,如果当前值在哈希表内,则哈希表中的该元素的值加一;
- 并且判断滑动窗口是否包含了T中的所有元素,如果是的:
- 当当前滑动窗口元素数count值大于right-left时,更新count值;
- 并记录当前滑动窗口的内容。
- 当左指针指向的元素在滑动窗口内时,将其哈希值减一。
- 左指针往右移一位。
4. 右指针向右移一位。
5. 返回结果值。