438.找到字符串中所有字母異位詞

class Solution:
def findAnagrams(self, s: str, p: str) -> List[int]:
l=0
r=0
res = []
p_d = {}
windows_d = {}
for _ in p:
p_d[_] = p_d.get(_,0)+1

    while(r<len(s)):
        #如果字母不在子串中,清空窗口字典,同時移動左右窗口
        if s[r] not in p:
            l=r=r+1
            windows_d.clear()
        #當字母在子串中,窗口字典計數
        windows_d[s[r]] = windows_d.get(s[r],0)+1
        #當窗口大小和子串長度相等時,判斷二者是否相等
        if r-l+1 == len(p):
            if windows_d==p_d:
                res.append(l)
            #將左邊窗口右滑,修改窗口字典
            windows_d[s[l]] = windows_d[s[l]]-1
            l=l+1
        #將右邊窗口右滑,進行下一輪判斷
        r=r+1
    return res
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章