Study Plan For Algorithms - Part38
1. 颜色分类
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
- 使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
- 不使用库内置的 sort 函数的情况下解决这个问题。
class Solution:
def sortColors(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
left = 0
right = len(nums) - 1
i = 0
while i <= right:
if nums[i] == 0:
nums[i], nums[left] = nums[left], nums[i]
left += 1
i += 1
elif nums[i] == 2:
nums[i], nums[right] = nums[right], nums[i]
right -= 1
else:
i += 1
2. 最小覆盖子串
给定一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。
from collections import Counter
class Solution:
def minWindow(self, s: str, t: str) -> str:
if not s or not t:
return ""
target_count = Counter(t)
window_count = Counter()
left, right = 0, 0
min_window = ""
min_length = float('inf')
match_count = 0
while right < len(s):
window_count[s[right]] += 1
if s[right] in target_count and window_count[s[right]] == target_count[s[right]]:
match_count += 1
while match_count == len(target_count):
if right - left + 1 < min_length:
min_length = right - left + 1
min_window = s[left:right + 1]
window_count[s[left]] -= 1
if s[left] in target_count and window_count[s[left]] < target_count[s[left]]:
match_count -= 1
left += 1
right += 1
return min_window
本文来自博客园,作者:WindMay,转载请注明原文链接:https://www.cnblogs.com/stephenxiong001/p/18426200