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

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

题目:

给定两个字符串 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 的用户,应该不用再优化了。

相关文章:

  • Linux下C++调用python脚本实现LDAP协议通过TNLM认证连接到AD服务器
  • postswigger 靶场(CSRF)攻略-- 1.没有防御措施的 CSRF 漏洞
  • 【Python】 Python 使用 Pillow 处理图像:几何变换
  • C //例 7.12 用选择法对数组中10个整数按由小到大排序。
  • 基于JAX-WS实现RESTful形式的web服务端点(endpoint)
  • 【数据分享】2021-2023年我国主要城市逐月轨道交通运营数据
  • 家庭安全计划 挑战赛| 溺水预防
  • FTP、NFS、SAMBA系统服务一
  • Java: 实现电影信息管理系统 (javaBean)
  • 前端面试之事件循环
  • sqoop笔记(安装、配置及使用)
  • 【架构】后端项目经典分层架构介绍
  • DeepFool: a simple and accurate method to fool deep neural networks
  • 答题猜歌闯关流量主小程序开发
  • 深圳联强优创手持PDA身份证阅读器 身份证核验手持机
  • @angular/forms 源码解析之双向绑定
  • CSS 专业技巧
  • MySQL-事务管理(基础)
  • oldjun 检测网站的经验
  • python docx文档转html页面
  • vue 配置sass、scss全局变量
  • web标准化(下)
  • 工作中总结前端开发流程--vue项目
  • 机器学习中为什么要做归一化normalization
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 设计模式 开闭原则
  • 一天一个设计模式之JS实现——适配器模式
  • Linux权限管理(week1_day5)--技术流ken
  • Mac 上flink的安装与启动
  • MyCAT水平分库
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #Z0458. 树的中心2
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (4)logging(日志模块)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (独孤九剑)--文件系统
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)平衡树
  • .equals()到底是什么意思?
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .ui文件相关
  • @SpringBootApplication 包含的三个注解及其含义
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [<事务专题>]
  • [100天算法】-每个元音包含偶数次的最长子字符串(day 53)