📅  最后修改于: 2023-12-03 14:48:43.848000             🧑  作者: Mango
| |问题 12
是一道经典的算法题目,题目给出两个字符串 s
和 t
,要求找到 s
中最短的子串,使得该子串包含了 t
中所有字符。
该问题可以使用滑动窗口算法(Sliding Window)来解决。
t
中出现的字符以及出现次数。left
和 right
分别指向 s
的开头和结尾,初始化的时候,两个指针都指向 s
的第一个字符。s
,当右指针指向的字符出现在哈希表中时,将其出现次数减一。t
中的字符,我们使用一个计数器 count
来记录当前找到的满足条件的字符数。count
等于 t
中字符数时,说明找到了一个满足条件的子串。count
的值。s
,并且找到了最短的满足条件的子串。def findSubstring(s: str, t: str) -> str:
# 记录 t 中每个字符出现的次数
t_freq = {}
for c in t:
t_freq[c] = t_freq.get(c, 0) + 1
# 记录窗口中每个字符出现的次数
window_freq = {}
left, right = 0, 0 # 窗口的左右指针
count = 0 # 记录窗口中已经包含了 t 中字符的数量
min_len = float('inf') # 记录当前最短的满足条件的子串的长度
res = '' # 记录当前最短的满足条件的子串
while right < len(s):
c1 = s[right]
if c1 in t_freq:
window_freq[c1] = window_freq.get(c1, 0) + 1
if window_freq[c1] == t_freq[c1]:
count += 1
right += 1
while count == len(t):
if right - left < min_len:
min_len = right - left
res = s[left:right]
c2 = s[left]
if c2 in t_freq:
window_freq[c2] -= 1
if window_freq[c2] < t_freq[c2]:
count -= 1
left += 1
return res
以上就是关于 | |问题 12
题目的详细介绍和算法分析。