LeetCode Hot之七:438. 找到字符串中所有字母异位词

news/2025/3/29 4:23:07/

题目:

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。

示例 1:

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

思路

哈希加滑动窗口。构造两个数组scnt和pcnt,分别存储s和p的字符在26个字母中的映射。如果这两个数组相等,那么就说明是字母异位词。且scnt和pcnt的长度也应该一致,因为scnt会同时作为滑动窗口。

代码

以下代码来自“德莫夫先生”在力扣上的对于官方代码的注释,讲解的很细致。

    int sLen=s.length();int pLen=p.length();if(sLen<pLen){return ans;}//建立两个数组存放字符串中字母出现的词频,并以此作为标准比较int [] scount=new int[26];int [] pcount=new int[26];//当滑动窗口的首位在s[0]处时 (相当于放置滑动窗口进入数组)for(int i=0;i<pLen;i++){++scount[s.charAt(i)-'a']; //记录s中前pLen个字母的词频++pcount[p.charAt(i)-'a']; //记录要寻找的字符串中每个字母的词频(只用进行一次来确定)}//判断放置处是否有异位词     (在放置时只需判断一次)if(Arrays.equals(scount,pcount)){ans.add(0);}   //开始让窗口进行滑动for(int i=0;i<sLen-pLen;i++){ //i是滑动前的首位--scount[s.charAt(i) -'a'];       //将滑动前首位的词频删去++scount[s.charAt(i+pLen) -'a'];  //增加滑动后最后一位的词频(以此达到滑动的效果)//判断滑动后处,是否有异位词if(Arrays.equals(scount,pcount)){ans.add(i+1);} }return ans;
}

效率

8ms 击败 70.93%使用 Java 的用户,应该不用再优化了。


http://www.ppmy.cn/news/1217325.html

相关文章

算法通关村第十五关白银挑战——海量数据场景下的热门算法题

大家好&#xff0c;我是怒码少年小码。 最近超级忙&#xff0c;很多实验报告&#xff0c;已经四五天没搞了&#xff0c;但是我还是回来了&#xff01; 海量数据场景下的热门算法题 本篇的题目不要求写代码&#xff0c;面试的时候能很清楚的说出思路就可以了。 1. 从40个亿中…

spring 整合 JUnit

大家好&#xff0c;本篇博客我们通过spring来整合JUnitt单元测试框架。 在之前篇章的测试方法中&#xff0c;几乎都能看到以下的两行代码&#xff1a; ApplicationContext context new ClassPathXmlApplicationContext("xxx.xml"); Xxxx xxx context.getBean(Xxx…

YOLO目标检测——苹果缺陷检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;苹果质量检测和自动化分拣系统数据集说明&#xff1a;苹果缺陷检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;含有缺陷图片和没缺陷图片。标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量…

【Linux】-文件系统的详解以及软硬链接

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

react脚手架create-react-app创建react项目

1.全局安装 create-react-app winR/桌面目录下cmd进入终端页面 npm i -g create-react-app2.create-react app 初始化项目 create-react-app 项目名称项目初始化完成 运行项目 目录下cmd控制台输入 npm start然后打开本地服务运行项目查看

ESP32 Arduino引脚分配参考:您应该使用哪些 GPIO 引脚?

ESP32 芯片有 48 个引脚&#xff0c;具有多种功能。并非所有 ESP32 开发板中的所有引脚都暴露出来&#xff0c;有些引脚无法使用。 关于如何使用 ESP32 GPIO 有很多问题。您应该使用什么引脚&#xff1f;您应该避免在项目中使用哪些引脚&#xff1f;这篇文章旨在成为 ESP32 GP…

TCP怎么实现可靠传输

链接 1&#xff0c;TCP头部的校验和保证获取正确数据&#xff0c;防篡改&#xff1b; 2&#xff0c;序列号和ACK确认机制同于管理数据包&#xff0c;对接收到的数据包进行确认&#xff0c;对没有接收到的数据包进行重传&#xff1b; 3&#xff0c;重传机制&#xff0c;包括超…

可以非常明显地感受到,一场有关直播带货的暗流正在涌动

虽然有关直播带货的争论依然还在持续&#xff0c;但是&#xff0c;我们依然无法否认今年的双十一依然是直播带货的高光时刻。无论是以淘宝、京东和拼多多为代表的传统电商平台&#xff0c;还是以抖音、快手为代表的新电商平台&#xff0c;几乎都将今年双十一的重心放在了直播带…