【LeetCode】438.找到字符串中所有的字母异位词

目录

  • 题目
    • 题目要求
      • 什么是“异位词”?
      • 如何快速判断两个字符串是否是“异位词”?
    • 解法 滑动窗口 + 哈希表 (统计个数)
      • 核心思路
      • 具体步骤
    • 代码

题目

题目链接:LeetCode-438题

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

题目要求

  1. 异位词 的子串
  2. 起始索引

什么是“异位词”?

异位词是指两个字符串的字符组成完全相同,但字符的顺序可以不同。例如,“abc” 和 “bca” 是异位词,而 “abc” 和 “abd” 不是。

如何快速判断两个字符串是否是“异位词”?

我们可以通过统计两个字符串中每个字符的个数来判断它们是否是异位词。如果两个字符串的字符统计结果完全相同,则它们是异位词。
利用哈希表来实现。
在这里插入图片描述

解法 滑动窗口 + 哈希表 (统计个数)

核心思路

  1. 滑动窗口:在字符串 s 上维护一个固定大小的窗口,窗口的大小等于字符串 p 的长度。

  2. 哈希表统计:使用哈希表统计窗口内字符的个数,并与 p 的字符统计结果进行比较。

  3. 优化:通过变量 count 统计窗口中“有效字符”的个数,避免每次比较整个哈希表。

优化:
利用变量count来统计窗口中“有效字符”的个数

  • 进窗口的字符,这个字符所对应的数如果<=对应p串对应字符的个数,则为有效字符,count++
  • 出窗口的字符,如果字符对应的数在出去之前>对应p串对应的字符的个数,则为无效字符,若为有效字符,count–;

具体步骤

  1. 初始化:
    • 统计字符串 p 的字符个数,存入哈希表 hashp。
    • 初始化滑动窗口的左边界 left = 0,右边界 right = 0。
    • 初始化变量 count,用于统计窗口中“有效字符”的个数。
  2. 滑动窗口:
    • 右边界 right 向右移动,将字符 s[right] 加入窗口,并更新哈希表 hashs。
    • 如果当前字符 s[right] 的个数不超过 p 中对应字符的个数,则 count++(表示这是一个有效字符)。
    • 如果窗口大小超过 p 的长度,则左边界 left 向右移动,将字符 s[left] 移出窗口,并更新哈希表 hashs。
    • 如果移出的字符 s[left] 的个数不超过 p 中对应字符的个数,则 count–(表示移出了一个有效字符)。
  3. 更新结果:
    • 如果 count 等于 p 的长度,说明当前窗口是一个异位词子串,记录起始索引 left。

代码

class Solution {
public:
    unordered_map<char,int> hashp;
    unordered_map<char,int> hashs;
    vector<int> ret;
    vector<int> findAnagrams(string s, string p) {
        //统计p
        for(auto ch : p)
        {
            hashp[ch] ++;
        }

        //滑动窗口
        int left = 0,right = 0;
        
        int count = 0;
        int m = p.size();
        for(right;right < s.size();right++)
        {
            char in = s[right];

            //进入窗口
            hashs[in] ++;  
            //判断是否是有效字符,维护count
            if(hashs[in]<=hashp[in]) count++; 

            if(right - left + 1 > m) 
            {
                //出窗口
                char out = s[left];
                left++;
                
                //判断是否是有效字符,维护count
                if(hashs[out]<=hashp[out]) count--;
                hashs[out]--;
            } 

            //更新结果
            if(count == m) ret.push_back(left);
        }

        return ret;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/971230.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式】【结构型模式】装饰者模式(Decorator)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…

基于Ubuntu+vLLM+NVIDIA T4高效部署DeepSeek大模型实战指南

一、 前言&#xff1a;拥抱vLLM与T4显卡的强强联合 在探索人工智能的道路上&#xff0c;如何高效地部署和运行大型语言模型&#xff08;LLMs&#xff09;一直是一个核心挑战。尤其是当我们面对资源有限的环境时&#xff0c;这个问题变得更加突出。原始的DeepSeek-R1-32B模型虽…

Windows环境搭建ES集群

搭建步骤 下载安装包 下载链接&#xff1a;https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.27-windows-x86_64.zip 解压 解压并复制出3份 es-node1配置 config/elasticsearch.yml cluster.name: xixi-es-win node.name: node-1 path.data: D:\\wor…

STM32 I2C通信协议说明

目录 背景 I2C协议 数据的有效性 I2C通信开始和停止条件 I2C数据传输 发送 响应 正常情况&#xff1a; 异常情况&#xff1a; 主机结束接收 写寄存器的标准流程 读寄存器的标准流程 仲裁机制 时钟同步 SDA线的仲裁 程序 背景 对单片机的三大通信中的I2C通信进…

Unity学习part2

为bilibili教程【【Unity教程】零基础带你从小白到超神】 https://www.bilibili.com/video/BV1gQ4y1e7SS/?p50&share_sourcecopy_web&vd_source6e7a3cbb802eb986578ad26fae1eeaab的笔记 1、灯光的使用 定向光模拟太阳&#xff0c;是平行光。旋转定向光&#xff0c;光…

Vue 实现主题切换(明暗)

项目地址&#xff1a;https://gitee.com/abcdfdewrw/vue3_xiaohongshu_project 效果展示&#xff1a; 步骤1&#xff1a;定义明暗scss样式 // 浅色模式 html[data-theme"light"]:root {--header-height: 72px;--color-border-bottom: #eef2f9;--color-primary-lab…

rabbitmq五种模式的总结——附java-se实现(详细)

rabbitmq五种模式的总结 完整项目地址&#xff1a;https://github.com/9lucifer/rabbitmq4j-learning 一、简单模式 &#xff08;一&#xff09;简单模式概述 RabbitMQ 的简单模式是最基础的消息队列模式&#xff0c;包含以下两个角色&#xff1a; 生产者&#xff1a;负责发…

数据结构 day02

3. 线性表 3.1. 顺序表 3.1.3. 顺序表编程实现 操作&#xff1a;增删改查 .h 文件 #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #define N 10 typedef struct seqlist {int data[N];int last; //代表数组中最后一个有效元素的下标 } seqlist_t;//1.创建一个空的顺序表 seq…

STM32的HAL库开发---ADC

一、ADC简介 1、ADC&#xff0c;全称&#xff1a;Analog-to-Digital Converter&#xff0c;指模拟/数字转换器 把一些传感器的物理量转换成电压&#xff0c;使用ADC采集电压&#xff0c;然后转换成数字量&#xff0c;经过单片机处理&#xff0c;进行控制和显示。 2、常见的AD…

25/2/16 <算法笔记> DirectPose

DirectPose 是一种直接从图像中预测物体的 6DoF&#xff08;位姿&#xff1a;6 Degrees of Freedom&#xff09;姿态 的方法&#xff0c;包括平移和平面旋转。它在目标检测、机器人视觉、增强现实&#xff08;AR&#xff09;和自动驾驶等领域中具有广泛应用。相比于传统的位姿估…

企业级API集成方案:基于阿里云函数计算调用DeepSeek全解析

解决方案链接&#xff1a;https://www.aliyun.com/solution/tech-solution/deepseek-r1-for-platforms?utm_contentg_1000401616 何为DeepSeek R1 DeepSeek R1模型有诸多技术优势。高效架构设计使其能更高效提取特征&#xff0c;减少冗余计算&#xff0c;提升数据处理速度、…

137,【4】 buuctf web [SCTF2019]Flag Shop

进入靶场 都点击看看 发现点击work会增加&#xffe5; 但肯定不能一直点下去 抓包看看 这看起来是一个 JWT&#xff08;JSON Web Token&#xff09;字符串。JWT 通常由三部分组成&#xff0c;通过点&#xff08;.&#xff09;分隔&#xff0c;分别是头部&#xff08;Header&…

ThinkPHP8视图赋值与渲染

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 在控制器操作中&#xff0c;使用view函数可以传入视图…

渗透利器:YAKIT 工具-基础实战教程.

YAKIT 工具-基础实战教程. YAKIT&#xff08;Yak Integrated Toolkit&#xff09;是一款基于Yak语言开发的集成化网络安全单兵工具&#xff0c;旨在覆盖渗透测试全流程&#xff0c;提供从信息收集、漏洞扫描到攻击实施的自动化支持。其核心目标是通过GUI界面降低Yak语言的使用…

Fiori APP配置中的Semantic object 小bug

在配置自开发程序的Fiori Tile时&#xff0c;需要填入Semantic Object。正常来说&#xff0c;是需要通过事务代码/N/UI2/SEMOBJ来提前新建的。 但是在S4 2022中&#xff0c;似乎存在一个bug&#xff0c;即无需新建也能输入自定义的Semantic Object。 如下&#xff0c;当我们任…

shell——分支语句

文章目录 基本语法常用判断条件(1)两个整数之间比较&#xff08;2&#xff09;按照文件权限进行判断&#xff08;3&#xff09;按照文件类型进行判断&#xff08;4&#xff09;多条件判断&#xff08;&& 表示前一条命令执行成功时&#xff0c;才执行后一条命令&#xf…

Ubuntu 连接 air pods

&#xff11;&#xff0e; sudo vim /etc/bluetooth/main.conf , 修改蓝牙模式为blder &#xff12;&#xff0e;sudo /etc/init.d/bluetooth restart, 重启蓝牙&#xff0c;即可连接成功

机器学习:k近邻

所有代码和文档均在golitter/Decoding-ML-Top10: 使用 Python 优雅地实现机器学习十大经典算法。 (github.com)&#xff0c;欢迎查看。 K 邻近算法&#xff08;K-Nearest Neighbors&#xff0c;简称 KNN&#xff09;是一种经典的机器学习算法&#xff0c;主要用于分类和回归任务…

低空经济:开启未来空中生活的全新蓝海

引言 随着科技的进步&#xff0c;我们不再仅仅依赖地面交通和传统物流。你是否曾幻想过&#xff0c;未来的某一天&#xff0c;快递、外卖可以像魔法一样直接从空中送到你手中&#xff1f;或者&#xff0c;你能乘坐小型飞行器&#xff0c;快速穿梭于城市之间&#xff0c;告别拥堵…

DeepSeek核心算法解析:如何打造比肩ChatGPT的国产大模型

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 DeepSeek大模型技术系列一DeepSeek核心算法解析&#xff1a;如何…