滑动窗口:寻找字符串中的字母异位词

复制代码
class Solution:
    def findAnagrams(self,s:str,p:str)->List[int]:
        ht={}
        window={}
        m=len(s)
        n=len(p)
        res=[]
        if m<n:
            return res
        left=0
        valid=0
        for a in p:  #记录p字符串出现的频率
            ht[a]=ht.get(a,0)+1

        for right in range(m): #开始遍历s字符串
            c=s[right]
            if c in ht: #右边界移动
                window[c]=window.get(c,0)+1
                if window[c]==ht[c]:
                    valid+=1
            if right-left+1>n: #移动左边界,窗口大了,需要缩小,但是缩小前,需要先检查
                d=s[left]
                if d in ht: #需要先判断当前字符在不在ht里面,在的话才需要对比
                    if window[d]==ht[d]:
                        valid-=1
                    window[d]-=1
                left+=1
            if valid==len(ht):
                res.append(left)
        return res

思路:通过记录每个字符出现的次数来进行对比。滑动窗口:左指针往右收缩,右指针往右扩展,时刻检查窗口大小,一旦超出窗口大小,就需要缩小窗口,缩小窗口前,需要先检查左指针指向的字符是否在目标哈希表内,如果在的话,继续对比该字符在窗口的数量与在目标哈希表的数量是否一致,如果一致,匹配度需要减一(因为等会就要在窗口删掉该字符)。匹配度减一后,该字符在窗口的数量减一,之后再移动左指针。

相关推荐
树獭非懒8 小时前
AI大模型小白手册|Embedding 与向量数据库
后端·python·llm
唐叔在学习11 小时前
就算没有服务器,我照样能够同步数据
后端·python·程序员
曲幽13 小时前
FastAPI流式输出实战与避坑指南:让AI像人一样“边想边说”
python·ai·fastapi·web·stream·chat·async·generator·ollama
Flittly13 小时前
【从零手写 AI Agent:learn-claude-code 项目实战笔记】(1)The Agent Loop (智能体循环)
python·agent
vivo互联网技术15 小时前
ICLR2026 | 视频虚化新突破!Any-to-Bokeh 一键生成电影感连贯效果
人工智能·python·深度学习
敏编程16 小时前
一天一个Python库:virtualenv - 隔离你的Python环境,保持项目整洁
python
喝茶与编码18 小时前
Python异步并发控制:asyncio.gather 与 Semaphore 协同设计解析
后端·python
zone773918 小时前
003:RAG 入门-LangChain 读取图片数据
后端·python·面试
用户83562907805118 小时前
在 PowerPoint 中用 Python 添加和定制形状的完整教程
后端·python