news 2026/9/3 1:04:55

LeetCode热题100:438. 找到字符串中所有字母异位词

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode热题100:438. 找到字符串中所有字母异位词

简介

题目链接:https://leetcode.cn/problems/find-all-anagrams-in-a-string/?envType=problem-list-v2&envId=2cktkvj

解决方式:滑动窗口

这是作者学习众多大神的思路进行解题的步骤,很推荐大家解题的时候去看看题解里面大佬们的思路、想法!

滑动窗口

classSolution{// 滑动窗口// 大体思路是有两个数组,一个代表滑动窗口,一个代表目标字符串,滑动窗口的大小于与目标字符串相同// 移动滑动窗口,比较两数组是否相同。相同则表示寻找到目标的字母异位体,因为两者的字符、数量相同publicList<Integer>findAnagrams(Strings,Stringp){intsLen=s.length(),pLen=p.length();// 特例判断if(sLen<pLen){returnnewArrayList<Integer>();}// 初始化数组和结果集ArrayList<Integer>ans=newArrayList<>();int[]sCount=newint[26];int[]pCount=newint[26];// 初始化滑动窗口for(inti=0;i<pLen;i++){// 字符与数组索引映射++sCount[s.charAt(i)-'a'];++pCount[p.charAt(i)-'a'];}if(Arrays.equals(sCount,pCount)){ans.add(0);}// 移动滑动窗口// 此时,i 代表滑动窗口的左边界以及 s 中剩下的字符,即滑动窗口需要移动的次数for(inti=0;i<sLen-pLen;i++){// 去除左边界元素--sCount[s.charAt(i)-'a'];// 滑动窗口向右移动++sCount[s.charAt(i+pLen)-'a'];// 判断if(Arrays.equals(sCount,pCount)){// 初始位置为左边界 + 1ans.add(i+1);}}returnans;}}

滑动窗口优化

classSolution{// 滑动窗口优化// 大体思路是维护一个数组和一个不同变量 differ,取代两个数组的全量比较publicList<Integer>findAnagrams(Strings,Stringp){intsLen=s.length(),pLen=p.length();// 特例判断if(sLen<pLen){returnnewArrayList<Integer>();}// 初始化数组和结果集ArrayList<Integer>ans=newArrayList<>();int[]count=newint[26];// 初始化滑动窗口for(inti=0;i<pLen;i++){// 字符与数组索引映射++count[s.charAt(i)-'a'];--count[p.charAt(i)-'a'];}// 记录当前窗口与目标字符种类不同的个数,检验是否找到字母异位体// 相同字符不同个数不重复计入intdiffer=0;for(intj=0;j<26;++j){if(count[j]!=0){++differ;}}if(differ==0){ans.add(0);}// 移动滑动窗口// 此时,i 代表滑动窗口的左边界以及 s 中剩下的字符,即滑动窗口需要移动的次数// 检验是否异位体,是通过判断 differ 是否为 0for(inti=0;i<sLen-pLen;i++){// 移动左边界// 左边界的变动会导致滑动窗口的字符发生变化// 需要判断会不会导致 differ 变化,即窗口找到异位体if(count[s.charAt(i)-'a']==1){--differ;}elseif(count[s.charAt(i)-'a']==0){++differ;}--count[s.charAt(i)-'a'];// 真正移动// 移动右边界// 右边界的变动也会导致滑动窗口的字符发生变化// 也需要判断会不会导致 differ 变化,即窗口找到异位体if(count[s.charAt(i+pLen)-'a']==-1){--differ;}elseif(count[s.charAt(i+pLen)-'a']==0){++differ;}++count[s.charAt(i+pLen)-'a'];// 真正移动// 判断if(differ==0){ans.add(i+1);}}returnans;}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 1:53:07

4大核心技术突破:智能语音识别如何重塑多模态语音处理生态

4大核心技术突破&#xff1a;智能语音识别如何重塑多模态语音处理生态 【免费下载链接】Qwen3-235B-A22B-MLX-8bit 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-235B-A22B-MLX-8bit 随着人工智能技术的飞速发展&#xff0c;智能语音识别正迎来革命性变革。…

作者头像 李华
网站建设 2026/9/2 3:06:36

为什么99%的工程师都搞不定VSCode量子硬件连接?(真实案例深度剖析)

第一章&#xff1a;VSCode 量子硬件的适配测试在探索量子计算与现代开发工具融合的过程中&#xff0c;VSCode 作为主流代码编辑器&#xff0c;正逐步支持量子程序的编写与调试。通过插件扩展机制&#xff0c;开发者可在本地环境中实现对量子硬件的模拟与真实设备的连接测试。环…

作者头像 李华
网站建设 2026/9/2 19:35:31

VSCode集成Qiskit项目部署实战(专家级避坑手册)

第一章&#xff1a;VSCode Qiskit 项目部署概述在量子计算快速发展的背景下&#xff0c;使用现代开发工具构建和部署 Qiskit 项目成为研究与工程实践的关键环节。Visual Studio Code&#xff08;VSCode&#xff09;凭借其强大的插件生态和调试能力&#xff0c;成为开发 Qiskit …

作者头像 李华
网站建设 2026/9/2 13:26:44

Note-Gen跨设备同步:如何实现无缝的笔记数据流转

Note-Gen跨设备同步&#xff1a;如何实现无缝的笔记数据流转 【免费下载链接】note-gen 一款跨平台的 Markdown AI 笔记软件&#xff0c;致力于使用 AI 建立记录和写作的桥梁。 项目地址: https://gitcode.com/codexu/note-gen 你是否曾经遇到过这样的困扰&#xff1a;在…

作者头像 李华
网站建设 2026/9/3 1:36:35

【JAVA基础指南(一)】快速掌握基础语法

&#x1f3ac; 博主名称&#xff1a; 超级苦力怕 &#x1f525; 个人专栏&#xff1a; 《Java 成长录》 《AI 工具使用目录》 &#x1f680; 每一次思考都是突破的前奏&#xff0c;每一次复盘都是精进的开始&#xff01; 前言 本文主要内容&#xff1a;从 0 认识“变量、…

作者头像 李华