当前位置: 首页 > news >正文

滑动窗口-02-找到字符串中所有字母异位词

文章目录

  • 1. 题目描述
  • 2. 思路
  • 3. 代码

1. 题目描述

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

示例 1:

输入: s = “cbaebabacd”, p = “abc”
输出: [0,6]
解释:
起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。
起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。

示例 2:

输入: s = “abab”, p = “ab”
输出: [0,1,2]
解释:
起始索引等于 0 的子串是 “ab”, 它是 “ab” 的异位词。
起始索引等于 1 的子串是 “ba”, 它是 “ab” 的异位词。
起始索引等于 2 的子串是 “ab”, 它是 “ab” 的异位词。

提示:

1 <= s.length, p.length <= 3 * 104
s 和 p 仅包含小写字母

2. 思路

  1. 如果p的长度比s长度大,就说明不存在异位词。
  2. 异位词排序后都是相同的,可以利用这个特点作比较,如果排序后相同就可以判定为是异位词。
  3. 以p的长度作为滑动窗口的大小,将字母转为数字以滑动窗口的大小进行比较,逐渐将窗口往后移

3. 代码

  • 方法一:排序比较子串
publicList<Integer>findAnagrams(Strings,Stringp){intsLen=s.length();intpLen=p.length();if(sLen<pLen){returnnewArrayList<Integer>();}List<Integer>result=newArrayList<>();char[]pList=p.toCharArray();Arrays.sort(pList);Stringtarget=newString(pList);for(inti=0;i<=sLen-pLen;i++){Stringnow=s.substring(i,i+pLen);char[]nowList=now.toCharArray();Arrays.sort(nowList);Stringsubstring=newString(nowList);if(substring.equals(target)){result.add(i);}}returnresult;}

优点:通俗易懂
缺点:每个子串都需要排序作比较,性能较低

  • 方法二:滑动窗口
publicList<Integer>findAnagrams2(Strings,Stringp){intsLen=s.length();intpLen=p.length();List<Integer>result=newArrayList<>();if(sLen<pLen){returnresult;}int[]sList=newint[26];int[]pList=newint[26];for(inti=0;i<pLen;i++){sList[s.charAt(i)-'a']++;pList[p.charAt(i)-'a']++;}if(Arrays.equals(sList,pList)){result.add(0);}//滑动窗口,以p的长度为滑动窗口的大小,从左往右移动窗口for(inti=0;i<sLen-pLen;i++){// 去掉窗口左边的字符sList[s.charAt(i)-'a']--;// 加入窗口右边的字符sList[s.charAt(i+pLen)-'a']++;if(Arrays.equals(sList,pList)){result.add(i+1);}}returnresult;}

以上为个人学习分享,如有问题,欢迎指出:)

http://www.jsqmd.com/news/422029/

相关文章:

  • 大数据毕设项目推荐-基于Django的B站数据分析可视化系统【附源码+文档,调试定制服务】
  • 【计算机毕业设计案例】基于Hadoop+springboot的个性化饮食推荐健康饮食推荐系统的设计与实现(程序+文档+讲解+定制)
  • C#程序启动报错“System.TypeInitializationException:“The type initializer for ...”
  • 【计算机毕业设计案例】基于Django的B站数据分析可视化系统(程序+文档+讲解+定制)
  • 学习C#调用Microsoft.ML.OnnxRuntime模块读取YOLO模型信息
  • 解决java文件无法写入安卓dex文件中的问题。
  • 市面上有实力的2025板材工厂 - 品牌推荐(官方)
  • 三菱伺服编码器驱动的追剪案例:8轴运动控制下的高级同步控制与凸轮同步技术
  • Kimi K2.5的进步点
  • 女友送礼技术文档
  • flutter: getx安装及使用路由的例子
  • 初中学生文旅研学,这些机构不容错过! - 品牌测评鉴赏家
  • 市面上2026板材工厂 - 品牌推荐(官方)
  • 2026.2.28
  • 2026家长必看!国内优质亲子文旅研学机构推荐 - 品牌测评鉴赏家
  • 行业内有实力的2025板材工厂排行榜 - 品牌推荐(官方)
  • Azure DevOps Server:2026年二月补丁
  • Azure DevOps Server:2026年二月补丁(Patch 8)
  • 自托管流媒体备用服务的搭建方法--基于Navidrome+ytm的实现
  • 2026板材十大品牌推荐榜 - 品牌推荐(官方)
  • 北京大渔优惠价格
  • 2026.2.28$
  • 语文课内古诗文
  • 必修化学
  • 2025板材厂家哪个好 - 品牌推荐(官方)
  • Python 潮流周刊#140:开发自己的 OpenClaw
  • 行业内专业的2025板材品牌 - 品牌推荐(官方)
  • 你的 JWT 方案安全吗?ASP.NET Core 刷新令牌机制详解
  • 2026年佛山漏水维修公司推荐,聚焦企业综合实力与核心竞争力 - 品牌鉴赏师
  • 每日一题:在 .NET 中,lock 的底层原理?