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

力扣 438.找到字符串中所有字母异位词

题目:

给定两个字符串 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" 的异位词。

分析:

借鉴了力扣49题的思路,拼接p中字符和字符出现次数来作为判断异位词的条件。从头开始遍历,计算s字符串中当前下标以及当前下标+p.length()-1之间字符的出现次数,进行拼接,与p的拼接结果进行比较,相同则保存当前下标。

这种方法虽然能通过但是太慢,每次都要拼接,都要进行一个26次的循环。

改进:

49题进行拼接是因为要在一堆字符串中找出其中的异位词组,所以要用拼接的结果作为unordered_map的键值,去和异位词做映射,保存拼接结果与键值相同的异位词。这题并不不需要,题目已经给出要找的字符串,所以直接比较字符出现次数就行。

采用滑动窗口,由于已经给出要查找的字符串,那么滑动窗口的大小就确定,是p的长度。在s和p中,都先从头开始,计算窗口大小字符串中字符的出现次数,保存在数组(scount,pcount)中(字符与下标映射)。然后s开始滑动:将窗口的首元素滑出,同时改变数组中该字符对应下标的元素的值(-1),然后将新字符加入滑动窗口,同理,改变scount数组中该字符对应下标的元素的值(+1)。滑动完一次,比较一次sount数组与pcount数组,相同则将窗口首元素在字符串中对应的下标保存。

代码:

class Solution {public:vector<int> findAnagrams(string s, string p) {vector<int>res;vector<int>scount(26);vector<int>pcount(26);for(int i=0;i<p.length();++i){scount[s[i]-'a']++;pcount[p[i]-'a']++;}if(scount==pcount){res.push_back(0);}for(int i=0;i<(s.length()-p.length());++i){//移除滑动窗口队头,增加新元素--scount[s[i]-'a'];++scount[s[i+p.length()]-'a'];if(scount==pcount){res.push_back(i+1);}}return res;}};

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

相关文章:

  • 【Python】Python入门——基础语法及顺序语句
  • 2.2 反向传播:神经网络如何“学习“?
  • frp-tool,客户端frp命令行工具
  • 【学术投稿-第五届应用数学、建模与智能计算国际学术会议】CSS伪类选择器深度解析:分类、应用与技巧
  • 常用查找算法整理(顺序查找、二分查找、哈希查找、二叉排序树查找、平衡二叉树查找、红黑树查找、B树和B+树查找、分块查找)
  • Express 中 res 响应方法详解
  • DeepAR:一种用于时间序列预测的深度学习模型
  • 权限模型深度解析:RBAC vs ABAC vs PBAC vs TBAC,如何选择最适合的方案?
  • Windows逆向工程入门之堆栈结构与信息获取
  • 【c++初阶】类和对象②默认成员函数以及运算符重载初识
  • 【做一个微信小程序】校园地图页面实现
  • 成熟开发者需具备的能力
  • 计算机毕业设计--基于深度学习技术(Yolov11、v8、v7、v5)算法的高效人脸检测模型设计与实现(含Github代码+Web端在线体验界面)
  • 力扣做题记录 (二叉树)
  • 机试刷题_字符串的排列【python】
  • 百度智能云—千帆 ModelBuilder API的简单调用(Java)
  • unity学习43:子状态机 sub-state machine
  • Qt MainWindow
  • GDB QUICK REFERENCE (GDB 快速参考手册)
  • 【数据结构】 栈和队列
  • AI视频创作教程:如何用AI让古画动起来。
  • 撕碎QT面具(1):Tab Widget转到某个Tab页
  • DeepSeek24小时写作机器人,持续创作高质量文案
  • npm安装依赖(npm install)时遇到认证错误的解决方案
  • SpringBoot+微信小程序+数据可视化的宠物到家喂宠服务(程序+论文+讲解+安装+调试+售后等)
  • 免费大模型网站
  • OpenCV的主要模块
  • 使用 Python 爬虫和 FFmpeg 爬取 B 站高清视频
  • Retrieval-Augmented Generation for LargeLanguage Models: A Survey
  • 2025年2月16日(numpy-deepseek)