news 2026/5/25 19:57:38

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/5/26 6:18:10

量子计算镜像兼容性测试指南(从Qiskit到Cirq的无缝迁移秘籍)

第一章&#xff1a;量子计算镜像的兼容性测试在部署量子计算模拟环境时&#xff0c;确保系统镜像与目标硬件及软件栈的兼容性至关重要。不兼容的镜像可能导致量子门操作异常、纠缠态生成失败或测量结果偏差。为保障实验的可重复性和计算准确性&#xff0c;必须对镜像进行系统化…

作者头像 李华
网站建设 2026/5/26 6:18:57

为什么90%的开发者都忽略了MCP PL-600的UI组件潜力?(深度揭秘)

第一章&#xff1a;MCP PL-600多模态Agent的UI组件全景解析MCP PL-600多模态Agent作为新一代智能交互系统的核心&#xff0c;其UI组件设计融合了视觉、语音与触控多通道输入输出能力&#xff0c;支持跨平台一致的用户体验。该架构通过模块化设计实现高内聚低耦合&#xff0c;使…

作者头像 李华
网站建设 2026/5/26 6:17:38

网站运营者注意:GB/T 46335.1 实施在即,这份合规指南请收好

2025年10月5日&#xff0c;国家市场监督管理总局、国家标准化管理委员会联合发布《GB/T 46335.1—2025 IPv6支持度评测指标与评测方法 第1部分&#xff1a;网站》&#xff0c;并宣布于2026年2月1日正式实施。这一标准的出台&#xff0c;标志着我国网站IPv6支持度建设告别了此前…

作者头像 李华
网站建设 2026/5/26 6:18:59

为什么你的Q#程序无法捕获Python异常?1个配置+3步修复方案

第一章&#xff1a;Q#-Python 的异常传递在混合编程模型中&#xff0c;Q# 与 Python 的协同执行为量子算法开发提供了灵活性&#xff0c;但同时也引入了跨语言异常处理的复杂性。当 Q# 代码在量子模拟器中运行时发生错误&#xff0c;该异常需跨越语言边界传递至 Python 主程序&…

作者头像 李华
网站建设 2026/5/26 5:05:58

STM32 USB主机模式:构建低成本嵌入式视觉系统的完整指南

STM32 USB主机模式&#xff1a;构建低成本嵌入式视觉系统的完整指南 【免费下载链接】STM32_HOST_UVC_Camera Example of connecting USB Web camera to STM32F4 USB HOST 项目地址: https://gitcode.com/gh_mirrors/st/STM32_HOST_UVC_Camera 在嵌入式视觉应用领域&…

作者头像 李华
网站建设 2026/5/26 6:18:39

【保姆级】Node.js 最新安装教程,附环境变量配置

&#x1f3ac; 博主名称&#xff1a; 超级苦力怕 &#x1f525; 个人专栏&#xff1a; 《Java成长录》 《AI 工具使用目录》 &#x1f680; 每一次思考都是突破的前奏&#xff0c;每一次复盘都是精进的开始&#xff01; 安装目录零基础安装 Node.js&#xff08;Windows&…

作者头像 李华