码迷,mamicode.com
首页 > 其他好文 > 详细

438.找到字符串中所有字母异位词

时间:2020-02-13 14:38:04      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:时移   self   end   ram   清空   pen   turn   anagrams   长度   

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

438.找到字符串中所有字母异位词

标签:时移   self   end   ram   清空   pen   turn   anagrams   长度   

原文地址:https://www.cnblogs.com/wangshujaun/p/12303403.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!