target_freq = defaultdict(int) # Character frequency of possible anagram.
# Character frequency of `p`. p_freq = defaultdict(int) for c in p: p_freq[c] += 1 res = [] for i in range(len(s)): # 把超過 p 長度的部分扣掉,維持 window 寬 (想像 window 往右,這邊移掉左邊一格) if i >= p_len: target_freq[s[i - p_len]] -= 1 if target_freq[s[i - p_len]] == 0: del target_freq[s[i - p_len]] # 個數減為 0 的話記得要把整個 key 拿掉,不然不可能會跟 `p_freq` 相等
target_freq[s[i]] += 1# Frequency 計算:加入當前字元 (`i` 是 sliding window 最右邊的 index) if target_freq == p_freq: res.append(i - p_len + 1) # 加入 sliding window 起始點到答案中 return res