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

【LeetCode热题100】【滑动窗口】找到字符串中所有字母异位词

给定两个字符串 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 仅包含小写字母

题解

一开始是想用两层循环,先将p排序一次,然后将s中每个和p一样长的子串拿出来重新排序之后和p比较是否相同,但是这种做法会超时

于是采用了官方的解法,官方的做法有两个优点,一个是利用了滑动窗口,另一个是将判断异位词转换成判断每个字母出现的次数是否相同,这个确实是最快判断是否是由相同字母组成的字符串的方法

class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int>answer;int sLength=s.size(),pLength=p.size();if(sLength<pLength){ // 如果s短于p,后面无法放置窗口return {};}vector<int>ss(26),pp(26); // 记录字母出现次数for(int i=0;i<pLength;i++){ // 放置滑动窗口ss[s[i]-'a']++;pp[p[i]-'a']++;}if(ss==pp)answer.emplace_back(0);for(int i=0;i<sLength-pLength;i++){ss[s[i]-'a']--; // 滑动窗口移动,去掉前一个字母的状态ss[s[i+pLength]-'a']++; // 滑动窗口移动,增加后一个字母的状态if(ss==pp)answer.emplace_back(i+1);}return answer;}
};

http://www.lryc.cn/news/257495.html

相关文章:

  • logback的使用
  • IntelliJ IDEA无公网远程连接Windows本地Mysql数据库提高开发效率
  • VS Code使用教程
  • StarRocks数据模型之主键模型(当前版本v3.1)
  • 正确使用React组件缓存
  • AMEYA360:大唐恩智浦荣获 2023芯向亦庄 “汽车芯片50强”
  • 在Arch Linux上安装yay
  • PHP案例:探究MySQL应用开发喜好的网络调查
  • 力扣第374场周赛题解
  • Linux Docker 安装Nginx
  • 鸿蒙应用开发(二)环境搭建
  • 在 Qt Creator 中编写 Doxygen 风格的注释
  • NSS [NSSCTF 2022 Spring Recruit]babyphp
  • ToolkenGPT:用大量工具增强LLM
  • 2022蓝桥杯c组求和
  • Altium Designer学习笔记11
  • TTS | 2019~2023年最新增强/生成情绪的语音合成调研(20231211更新版)
  • 搜狗输入法v模式 | 爱莉希雅皮肤
  • 2023年阿里云云栖大会-核心PPT资料下载
  • JavaScript实战:制作一个待办事项列表应用
  • 4面百度软件测试工程师的面试经验总结
  • textarea文本框回车enter的时候自动提交表单,根据内容自动高度
  • dubbo框架技术文档-《spring-boot整合dubbo框架搭建+配置文件》框架的本地基础搭建
  • 中通快递单号查询入口,将指定某天签收的单号筛选出来
  • MySQL-含json字段表和与不含json字段表查询性能对比
  • 如何用Docker快速搭建本地开发环境
  • SpringDataJPA基础
  • 程序员如何成为自由的独立开发者?
  • Ant Design Vue(v1.7.8)a-table组件的插槽功能
  • 笔记69:Conv1d 和 Conv2d 之间的区别