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