滑动窗口专题——找到所有字母的异位词

news2024/11/25 16:41:20

一、题目解析:

题意如图

二、算法分析

本题依旧是两种方法:暴力枚举、滑动窗口

暴力枚举:

枚举出所有的字串进行比较,符合则记录位置,最终返回结果数组。

滑动窗口+哈希表:

思路:1、初始化左右指针,以及一个记录‘有效字符’的count,初始化两个hash表,一个保存目标字符串中所有字符出现的个数,方便比较。

           2、入窗口:从左向右入窗口,入窗口需要在哈希表中s[right]为下标的位置加1,同时维护count,如果该位置的字符是有效字符(该字符此时出现的次数小于等于在在目标哈希表中出现的次数)count++;反之不变。

           3、出窗口:如果此时right-left + 1 < 目标字符串的长度,left++;在++之前判断出窗口的字符是否是有效字符,若是有效字符,count--,反正不变。出窗口后判断此时count是否等于目标字符串的长度,如果相等,则代表该位置满足要求。

           4、输出记录的ret。

三、代码编写

class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        vector<int> ret;//定义数组返回要的下标索引
        int hash1[26] = {0},hash2[26] = {0};//两个数组模拟哈希
        for(auto a : p)
            hash1[a - 'a']++;//循环for统计出现次数
        int n = p.size(); //大小
        for(int left = 0,right = 0,count = 0;right < s.size(); right++){
            //count是统计有效字符数量
            char in = s[right];
            hash2[in-'a']++;//进窗口
            if(hash2[in - 'a'] <= hash1[in - 'a']) count++;//是有效字符,count++
            if(right - left + 1 > n){//判断
                char out = s[left++];
                if(hash2[out - 'a'] <= hash1[out - 'a']) count--;//减少有效字符
                hash2[out - 'a']--;//出窗口
            }
            if(count == n) ret.push_back(left);//这个区间符合要求用数组返回索引
        }
        return ret;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么区分Alpha因子和风险因子?

这是一个絮絮叨叨的专题系列&#xff0c;跟大伙儿唠一唠量化相关的小问题&#xff0c;有感而发写到哪算哪&#xff0c;这是第3期&#xff0c;来唠个14块钱的~ 不知大伙儿有木有这样的疑惑&#xff1f; 看到Barra里面有Size、Liquid等因子&#xff0c;这些因子同样出现在很多人的…

【Redis】String字符串

目录 String字符串 常见命令 SET GET MSET MGET SETNX 计数命令 INCR INCRBY DECY DECYBY INCRBYFLOAT 其他命令 APPEND GETRANGE SETRANGE STRLEN 内部编码 String类型的典型使用场景 缓存(Cache)功能 计数功能 共享会话(Session) String字符串 字符…

bat批处理文件 —— 用于自动化环境配置和项目执行

文章目录 一、什么是 bat &#xff1f;1.1、支持 bat 的编辑软件1.2、常用命令 三、项目实战3.1、入门案例3.2、&#xff08;自动化&#xff09;环境配置与python库安装3.3、将 bat 当成一个简易的 .exe 可执行文件 四、标识符详解4.1、rem&#xff1a;添加注释4.2、echo off&a…

网工内推 | 上市公司IT工程师,最高15薪,周末双休

01 上海索辰信息科技股份有限公司 &#x1f537;招聘岗位&#xff1a;IT工程师 &#x1f537;岗位职责&#xff1a; 1、熟悉代码研发类企业的内部信息化管理&#xff0c;参与公司自主开发系统的规划和建设&#xff0c;搭建高级别内部信息安全体系&#xff0c;对内部信息的安全…

【practise】删除有序数组中的重复项

关于博主&#xff1a; 今天分享一道简单的关于“双指针”算法的题目。算是双指针中非常基础的题目&#xff0c;有兴趣可以借鉴一波~ 目录 1.题目介绍2.题解思路&#xff1a;双指针法3.代码示例 1.题目介绍 题目链接&#xff1a;LINK 本题要求是&#xff1a;对给定的有序数组…

Android中的沉浸式丝滑转场之共享元素转场动画

文章目录 1. 介绍2. 实现方法3. 举例演示3.1 举例一&#xff1a;普通页面间共享元素转场动画3.2 举例二&#xff1a;列表页面共享元素转场动画 4. 总结 1. 介绍 在Android开发中&#xff0c;经常会有页面转场的动画效果。普通的转场动画不过是左进右出&#xff0c;渐显渐隐&am…

树莓派4B学习笔记24:Python_SYN6288语音模块的控制函数

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: ​ Opencv 版本是4.5.1&#xff1a; ​ Python 版本3.7.3&#xff1a; 今日学习SYN6288语…

叛逆,批判

1、对以往说法的批判之一&#xff08;第一次这么公开批判是2004-2005年&#xff09;&#xff1a; 这部英文版的《数学百科全书》似乎是从俄语版翻译过来的&#xff1f;我查了三本引用的图书文献&#xff0c;都没有关于“nonsingular”和“singular”的类似下面的说法&#xff…

加密市场再遭重创:多重利空因素引发超10亿美元抛售潮

四年前的全球“熔断潮”仿佛还在眼前&#xff0c;如今金融市场再度迎来剧烈震荡&#xff0c;全球股市与加密货币市场遭遇多重利空冲击&#xff0c;尤其是比特币和以太坊的闪崩使得市场恐慌情绪蔓延。这个“黑色星期一”不仅见证了股市的跳水&#xff0c;还标志着加密市场的又一…

每日学习笔记:C++ STL算法之已排序区间算法

目录 查找元素 检查某个元素是否存在: binary_search(beg, end, value) binary_search(beg, end, value, op) 检查数个元素是否存在&#xff1a; includes(beg, end, searchBeg, searchEnd) includes(beg, end, searchBeg, searchEnd, op) ​编辑 查找第一个或最后一…

网安新声 | 微软蓝屏事件安全启示录

网安加社区【网安新声】栏目&#xff0c;汇聚网络安全领域的权威专家与资深学者&#xff0c;紧跟当下热点安全事件、剖析前沿技术动态及政策导向&#xff0c;以专业视野和前瞻洞察&#xff0c;引领行业共同探讨并应对新挑战的策略与可行路径。 2024年7月19日&#xff0c;微软发…

搭建Mysql主从架构

一、主从 1、备份的三种类型 热备份逻辑备份物理备份 二、集群 1、概述 高可用集群&#xff08;HA&#xff09;是指通过特殊软件&#xff0c;把独立的服务器连接起来&#xff0c;组成一个能够提供故障间切换功能的集群。 2、标准 可用性级别 年宕机时间 描述 99% 3.65天 …

蜂窝网络架构

2G/3G 4G eNB RF-RRU eCPRI RRU-BBU 光纤 5G From 38.300 AMF处理信令等&#xff0c;UPF 用户面&#xff0c;后面还有SMF

Day20 文件IO

feof&#xff08;FILE*&#xff09; 用于检测文件是否到达结尾 ferror&#xff08;FILE*&#xff09; 检测文件是否发生错误 clearerr&#xff08;FILE*&#xff09; 清除错误 一.文件IO的特性 1 没有缓存区 2 操作对象不在是流&#xff0c;而是文件描述符 3…

埃拉托斯特尼筛法,厄拉多塞筛算法,C#实现

埃拉托斯特尼筛法&#xff0c;厄拉多塞筛算法 这个 很多地方的定义不一样。 虽然名字相同&#xff0c;但是具体的定义还是有差距。 有的地方描述的是&#xff1a; 厄拉多塞筛算法(Eratosthenes Sieve)是一种求素数的方法&#xff0c;由古希腊数学家厄拉多塞提出。它的原理是&…

如何下载学术论文、专利(最全)——包含免费方法

经常有同学问&#xff0c;如何下载论文 一、中文论文 万方&#xff08;在校生一般学校已购买权限&#xff0c;具体可看自己学校图书馆&#xff09; 网址&#xff1a;https://www.wanfangdata.com.cn/ 2. 知网&#xff08;在校生一般学校已购买权限&#xff0c;具体可看自己学…

【ML】transform 之 encode 及其实现细节

transform 之 encode 及其实现细节 1. transform (seq2seq) 是什么2. transform (seq2seq) 具体如何实现3. transform (seq2seq) 可以解决哪些类型的问题4. 补充问题4.1 残差连接&#xff08;Residual Connection&#xff09;是什么如何实现4.1.2 残差连接的具体实现&#xff1…

一文搞懂后端面试之MySQL MVCC【中间件 | 数据库 | MySQL | 隔离级别 | Read View】

为什么需要MVCC 锁本身就是用于并发控制的&#xff0c;那么为什么InnoDB还要引入MVCC&#xff0c;读写都加锁不就可以控制住并发吗&#xff1f; 锁确实可以&#xff0c;但是性能太差。如果是纯粹的锁&#xff0c;那么写和写、读和写、读和读之间都是互斥的。如果是读写锁&…

C#TreeView控件应用

1、代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace TestApp…

两数之和 II(LeetCode)

题目 给你一个下标从 1 开始的整数数组 &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 的两个数。 如果设这两个数分别是 和 &#xff0c;则 。 以长度为 的整数数组 形式返回这两个整数的下标 和 。 你可以假设每个输入…