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

滑动窗口实例6(找到字符串中所有字母异位词)

题目:

给定两个字符串 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 的异位词的长度⼀定与字符串 p 的长度度相同,且异位词每种字母的个数和字符串每种字母的个数相同,所以我们可以利用滑动窗口(同向双指针)构造一个长度和字符串p相同的滑动窗口,并在滑动中维护窗⼝中每种字母的数量

 两个数组来模拟哈希表,hash1数组统计字符串p所有字母个数, hash2数组统计窗口中所有字母的个数

1 count变量来统计窗口中有效字母的个数,所谓有效字母就是某个字母加入窗口后,它的个数<=字符串p中同字母的个数,那么count++

2 left=0(左边界) right=0(指向待加入窗口中的元素)

3 进窗口+维护count:hash2数组为right指向的字母计算上一次个数

                                    如果该字母加入窗口后,此字母的个数<=hash1数组中同字母的个数

                                    则count++
4 判断是否出窗口+维护count:

                                    如果当前窗口的长度超过字符串p的长度,则要出窗口,只需要出一个元素

                                    在出窗口之前,要判断出窗口的字母是否为有效字母,若为有效字母

                                    则count--

                                    出窗口:出窗口的此字母在hash2数组中的个数-1,同时left++

5 更新结果:若是有效字母的个数==字符串p的长度,则该滑动窗口构成的是异位词

代码实现:

class Solution
{
public:vector<int> findAnagrams(string s, string p) {int hash1[26] = {0};//统计字符串p中每个字符出现的个数for(auto e:p){hash1[e-'a']++;}int hash2[26] = {0};//统计窗口里每个字符出现的个数int left = 0;int right = 0;int n = s.size();int m = p.size();int count = 0;vector<int> ret;while(right<n){hash2[s[right]-'a']++;//进窗口+维护countif(hash2[s[right]-'a']<=hash1[s[right]-'a']){count++;}if(right-left+1>m)//判断{if(hash2[s[left]-'a']--<=hash1[s[left]-'a'])//出窗口+维护count{count--;}left++;}if(count==m)//更新结果{ret.push_back(left);}right++;}return ret;}
};

相关文章:

滑动窗口实例6(找到字符串中所有字母异位词)

题目&#xff1a; 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串&#xff08;包括相同的字符串&#xff09;。 示例 1: 输入: s "cbaebabac…...

武林新秀(一)`git init` 初始化一个新的Git仓库

文章目录 命令的概述和用途命令的用法命令行选项和参数的详细说明命令的示例命令的注意事项或提示 命令的概述和用途 git init 是 Git 版本控制系统中用于初始化一个新的 Git 仓库或重新初始化一个现有的仓库的命令。“init” 是 “initialize”&#xff08;初始化&#xff09…...

gRPC之Interceptor

1、gRPC Interceptor 在应用开发过程中会有这样的需求&#xff0c;就是在请求执行前后做一些通用的处理逻辑&#xff0c;比如记录日志、tracing、身份 认证等&#xff0c;在web框架中一般是使用middleware来实现的&#xff0c;gRPC 在客户端和服务端都支持了拦截器功能&#…...

计算机竞赛 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

文章目录 0 简介1 二维码检测2 算法实现流程3 特征提取4 特征分类5 后处理6 代码实现5 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器学习的二维码识别检测 - opencv 二维码 识别检测 机器视觉 该项目较为新颖&#xff0c;适合作为竞赛课…...

ELK安装、部署、调试 (七)kibana的安装与配置

1.介绍 Kibana 是一个基于浏览器的开源可视化工具&#xff0c;主要用于分析大量日志&#xff0c;以折线图、条形图、饼图、热图、区域图、坐标图、仪表、目标、时间等形式。预测或查看输入源的错误或其他重大事件趋势的变化。Kibana 与 Elasticsearch 和 Logstash 同步工作&am…...

【Npm】的安装和使用教程

前端工具及插件库 专栏收录该内容 24 篇文章1 订阅 订阅专栏 npm 一、安装配置 二、初始化配置文件 package.json package.lock.json 二、下载模块 2.1、下载指令 2.2、清理缓存 2.3、模块信息 2.4、npm i 与 npm ci 区别 三、其他指令 第三方模块是别人写好的一些文件&#xf…...

22.3D等距社交媒体菜单的悬停特效

效果 源码 <!doctype html> <html><head><meta charset="utf-8"><title>CSS Isometric Social Media Menu</title><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.…...

音视频开发常用工具

文章目录 前言一、VLC 播放器1、简介2、下载3、VLC media player4、VLC 打开网络串流5、VLC 作为流媒体服务器①、搭建 RTSP 流媒体服务器②、新建播放器 二、MediaInfo1、简介2、下载3、MediaInfo①、主界面②、主要功能特点③、使用方法④、Mediainfo 相关参数和含义简介 三、…...

【leetcode 力扣刷题】字符串匹配之经典的KMP!!!

字符串子串匹配相关 28. 找出字符串中第一个匹配项的下标暴力求解KMP 459. 重复的子字符串暴力求解在SS中找S 以下是能用KMP求解的算法题&#xff0c;KMP是用于字符串匹配的经典算法【至今没学懂………啊啊啊】 28. 找出字符串中第一个匹配项的下标 题目链接&#xff1a;28. 找…...

C#的反射机制

介绍 当谈到C#的反射机制时&#xff0c;它提供了一种动态地在运行时获取和操作类型信息的能力。通过反射&#xff0c;可以在编译时未知的情况下&#xff0c;使用类型信息来创建对象、调用方法、访问属性和字段等。下面是一些反射机制的重要概念和用法&#xff1a; Type 类型&a…...

浅谈城市轨道交通视频监控与AI视频智能分析解决方案

一、背景分析 地铁作为重要的公共场所交通枢纽&#xff0c;流动性非常高、人员大量聚集&#xff0c;轨道交通需要利用视频监控系统来实现全程、全方位的安全防范&#xff0c;这也是保证地铁行车组织和安全的重要手段。调度员和车站值班员通过系统监管列车运行、客流情况、变电…...

【LeetCode每日一题合集】2023.8.14-2023.8.20(⭐切披萨3n块披萨)

文章目录 617. 合并二叉树833. 字符串中的查找与替换&#xff08;模拟&#xff09;2682. 找出转圈游戏输家&#xff08;模拟&#xff09;1444. 切披萨的方案数&#xff08;⭐⭐⭐⭐⭐&#xff09;解法——从递归到递推到优化&#xff08;二维前缀和记忆化搜索&#xff09; 1388…...

通过ref 操作dom , 点击按钮后跳转到页面指定图片位置

滚动图片到视图 定义了一个名为 scrollToIndex 的函数&#xff0c;它接受一个参数 index。当按钮被点击时&#xff0c;这个函数会被调用&#xff0c;并根据传入的 index 值来滚动到对应的图片。 以 alt 来标记图片位置 alt“Tom” import { useRef } from "react";c…...

QT 设置应用程序图标

1.下载xx.ico图标&#xff1a;ico网址 2.在线PNG转换ICO&#xff1a;png在线转换ico 3.添加图标资源 1&#xff09;新建文件路径 2&#xff09;添加图片资源 3&#xff09;在 .pro文件里面添加图片 4&#xff09;将xx.ico放到工程目录&#xff0c;编译完可以看到xx.exe的图标…...

牛客网刷题

牛客网刷题-C&C 2023年9月3日15:58:392023年9月3日16:37:01 2023年9月3日15:58:39 2023年9月3日16:37:01 整型常量和实型常量的区别...

ES6核心语法

主要记录学习ES6的语法 1、let和const 同es5中的var来声明变量。三者的区别分别是&#xff1a; var声明的变量存在变量提升&#xff0c;先声明未赋值&#xff0c;值为undefined。且变量声明可在函数块内使用。变量声明之后可以重复声明let声明的变量无变量提升。作用域是块级…...

python 之import与from import 导入库的解析与差异

文章目录 1. **使用import导入整个模块**&#xff1a;2. **使用from import导入特定内容**&#xff1a;注意事项别名的使用 在Python中&#xff0c;import和from import是用于导入模块中内容的两种不同方式。下面详细介绍它们的用法和差异&#xff1a; 1. 使用import导入整个模…...

python实现MQTT协议(发布者,订阅者,topic)

python实现MQTT协议 一、简介 1.1 概述 本文章针对物联网MQTT协议完成python实现 1.2 环境 Apache-apollo创建brokerPython实现发布者和订阅者 1.3 内容 MQTT协议架构说明 &#xff1a; 利用仿真服务体会 MQTT协议 针对MQTT协议进行测试 任务1&#xff1a;MQTT协议应…...

2023年09月03日-----16:58

协同过滤推荐和矩阵分解本质上有什么不同?协同过滤推荐和矩阵分解是两种推荐系统方法,它们在某些方面有相似之处,但也有一些本质不同之处。 基本原理: 协同过滤推荐:协同过滤是一种基于用户行为数据的推荐方法,它依赖于用户-物品交互数据,如用户的评分或点击历史。协同过…...

HTTP状态码504(Gateway Timeout)报错原因分析和解决办法

文章目录 504报错原因分析一、用户角度1. 代理服务器问题2. 网络问题 二、网站管理员角度1. 服务器负载过重2. 网关配置问题3. 目标服务器响应慢4. IIS/nginx/apache服务关闭5. 维护或故障6. 数据库的慢处理也会导致504 用户角度可以采取哪些措施解决504错误1. 刷新页面2. 检查…...

3步实现视频硬字幕精准提取:本地化多语言解决方案如何解决你的字幕难题

3步实现视频硬字幕精准提取&#xff1a;本地化多语言解决方案如何解决你的字幕难题 【免费下载链接】video-subtitle-extractor 视频硬字幕提取&#xff0c;生成srt文件。无需申请第三方API&#xff0c;本地实现文本识别。基于深度学习的视频字幕提取框架&#xff0c;包含字幕区…...

如何评估 SEO 优化的成本效益_SEO优化应该重点关注哪些方面

如何评估 SEO 优化的成本效益 在当今互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为了提升网站流量和品牌知名度的关键手段。SEO 优化的成本效益评估并不是一件简单的事情。如何在有限的预算内实现最大的效益&#xff0c;是每一个企业和网站运营者都需…...

TDengine IDMP 工业数据建模 —— 数据标准化

3.4 数据标准化 工业环境通常从多个数据源采集数据&#xff0c;这些数据往往命名不一致、物理单位各异、数据结构不同。如果没有标准化&#xff0c;跨资产分析、AI 生成洞察和数据汇聚将变得不可靠甚至无法实现。TDengine IDMP 提供了多种机制&#xff0c;对整个资产模型中的数…...

Qwen2.5-VL图文助手体验:RTX 4090极速推理,支持对话历史和一键清空

Qwen2.5-VL图文助手体验&#xff1a;RTX 4090极速推理&#xff0c;支持对话历史和一键清空 如果你手头有一张RTX 4090显卡&#xff0c;想找一个能看懂图片、能聊天、还能帮你处理各种视觉任务的本地AI助手&#xff0c;那么今天要聊的这个工具&#xff0c;你可能会很感兴趣。 …...

告别轮询!用STM32F407的USART3+DMA+空闲中断实现高效串口数据接收

STM32F407高效串口通信&#xff1a;USART3DMA空闲中断实战指南 在嵌入式开发中&#xff0c;串口通信是最基础也最常用的外设之一。传统的中断接收方式虽然简单&#xff0c;但在高速或大数据量传输时&#xff0c;频繁的中断响应会显著增加CPU负担&#xff0c;甚至导致数据丢失。…...

一键搞定完整网页截图:Chrome扩展终极指南

一键搞定完整网页截图&#xff1a;Chrome扩展终极指南 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chrome-extension 你…...

Pi0一键部署教程:nohup后台运行+log实时监控+进程安全终止

Pi0一键部署教程&#xff1a;nohup后台运行log实时监控进程安全终止 本文介绍如何快速部署和运行Pi0机器人控制模型&#xff0c;重点讲解后台运行、日志监控和进程管理的实用技巧&#xff0c;让AI应用稳定运行在服务器环境中。 1. 项目简介&#xff1a;什么是Pi0&#xff1f; …...

7步掌握MetaGPT:从单行需求到完整软件的多智能体革命

7步掌握MetaGPT&#xff1a;从单行需求到完整软件的多智能体革命 【免费下载链接】MetaGPT &#x1f31f; The Multi-Agent Framework: First AI Software Company, Towards Natural Language Programming 项目地址: https://gitcode.com/GitHub_Trending/me/MetaGPT 想…...

如何快速上手AutoGPT-Next-Web:5分钟搭建专属AI助手

如何快速上手AutoGPT-Next-Web&#xff1a;5分钟搭建专属AI助手 【免费下载链接】AutoGPT-Next-Web &#x1f916; Assemble, configure, and deploy autonomous AI Agents in your browser.一键免费部署你的私人AutoGPT 网页应用 项目地址: https://gitcode.com/gh_mirrors/…...

5分钟零代码部署:Live2D AI虚拟助手让你的网站活起来

5分钟零代码部署&#xff1a;Live2D AI虚拟助手让你的网站活起来 【免费下载链接】live2d_ai 基于live2d.js实现的动画小人ai&#xff0c;拥有聊天功能&#xff0c;还有图片识别功能&#xff0c;可以嵌入到网页里 项目地址: https://gitcode.com/gh_mirrors/li/live2d_ai …...