力扣hot9---滑动窗口

题目:

先记录一下(没想到有生之年,还能):其实还能优化,后面会讲述优化思路

 思路:

滑动窗口的大小就是固定的,就是len_p。那么依次将窗口从s的最左端向右滑动。在当下的窗口中,判断窗口中s的子串和p串中元素种类及个数是否匹配即可(这里用cnt_s,cnt_p分别记录对应元素的个数)。

代码:

C++:

class Solution {
public:
    int cnt_s[26]={0};
    int cnt_p[26]={0};
    bool check(){
        for(int i=0;i<26;i++){
            if(cnt_s[i]!=cnt_p[i]){
                return false;
            }
        }
        return true;
    }
    vector<int> findAnagrams(string s, string p) {
        vector<int> res;
        int len_s=s.size();
        int len_p=p.size();
        //记录cnt_p
        for(int i=0;i<len_p;i++){
            cnt_p[p[i]-'a']++;
        }
        for(int i=0;i<=len_s-len_p;i++){
            if(i==0){
                for(int j=0;j<len_p;j++){
                    cnt_s[s[j]-'a']++;
                }
            }
            else{
                cnt_s[s[i-1]-'a']--;
                cnt_s[s[i+len_p-1]-'a']++;
            }
            if(check()){
                res.push_back(i);
            }
        }
        return res;
    }
};

python:

class Solution:
    def findAnagrams(self, s: str, p: str) -> List[int]:
        cnt_s=[0]*26
        cnt_p=[0]*26
        res=[]
        len_s,len_p=len(s),len(p)
        for i in p:
            cnt_p[ord(i)-ord('a')]+=1
        for i in range(0,len_s-len_p+1):
            if i==0:
                for j in s[0:len_p]:
                    cnt_s[ord(j)-ord('a')]+=1
            else:
                cnt_s[ord(s[i-1])-ord('a')]-=1
                cnt_s[ord(s[i+len_p-1])-ord('a')]+=1
            if cnt_s==cnt_p:
                res.append(i)
        return res
        

注意python中的写法:

cnt_s=[0]*26
cnt_p=[0]*26

 

对标于C++的cnt_p [ p [ i ] - 'a' ]++ ; 

cnt_p[ord(i)-ord('a')]+=1
cnt_s==cnt_p

 

优化

可以在窗口滑动后,先判断新加入的元素是否属于p串(这里维护一个哈希表),如果不属于,那么左窗口直接跳到新加入元素的下一个位置。

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

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

相关文章

python概率分析:为什么葫芦娃救爷爷是一个一个地救成功率最高?

关键词&#xff1a; Python 、葫芦娃 、 概率计算 、 数学 、 建模 前言 过完年了返工后想起了小孩子们爱看的葫芦娃救爷爷的动画片&#xff0c;葫芦娃为什么是一个一个前去救爷爷&#xff0c;为什么不等着七个一起去救爷爷。带着这个疑问&#xff0c;我决定今天用数学的角度…

微信小程序用户隐私保护指引设置

场景&#xff1a;开发小程序时&#xff0c;有时候需要获取用户隐私信息&#xff0c;在提交小程序审核时&#xff0c;需要填写一份隐私保护协议&#xff0c;经常由于填写不规范导致审核不通过&#xff0c;在网上找到了一份模块可供参考 步骤&#xff1a;小程序后台-》设置-》服…

MySQL 学习笔记(基础篇 Day1)

「写在前面」 本文为黑马程序员 MySQL 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。 目录 0 课程介绍 1 MySQL 概述 1.1 数据库相关概念 1.2 MySQL 数据库 2 SQL 2.1 SQL 通用语法 2.2 SQL 分类 2.3 DDL 2.4 图形…

周最佳:詹姆斯场均30.3分8.7助 杰伦-布朗场均28.3分分别当选

直播吧指定地址&#xff1a;www.bdky.cn 3月5日讯 今日NBA官方公布了本赛季第19周周最佳球员&#xff0c;湖人球星勒布朗-詹姆斯和绿军球星杰伦-布朗分别当选。 上周詹姆斯场均可以得到30.3分4.7篮板8.7助攻&#xff0c;湖人取得2胜1负战绩。 布朗场均可以得到28.3分5.3篮板…

Linux中断实验:定时器实现按键消抖处理实验一

一. 简介 前面文章学习了Linux驱动按键中断实验&#xff0c;文章地址如下&#xff1a; Linux驱动按键中断实验&#xff1a;按键中断功能的实现-CSDN博客 本文在Linux驱动按键中断实现的基础上&#xff0c;使用定时器实现按键消抖处理。 二. Linux中断实验&#xff1a;定时器…

java:String和StringBuilder 的相互转换实现字符串拼接

public class StringDemo {/* 练习题&#xff1a;字符串拼接升级版1.定义一个int类型的数组&#xff0c;用静态初始化完成数组元素的初始化2.定义一个方法&#xff0c;用于把int数组中的数据按照指定格式拼接成一个字符串返回3.在方法中用StringBuilder按照要求进行拼接&#x…

新生儿放屁的温馨小贴士:呵护宝宝舒适健康成长

引言 新生儿的生活充满了各种令人惊喜和可爱的瞬间&#xff0c;其中包括他们放臭屁的时刻。尽管这看似简单的行为可能引发父母的担忧&#xff0c;但实际上&#xff0c;它通常是宝宝健康发展的自然表现。在这篇文章中&#xff0c;我们将分享一些关于新生儿放臭屁的注意事项&…

面试经典150题 -- 回溯 (总结)

总的链接 : 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 17 . 电话号码的字母组合 1 . 先创建一个下标 与 对应字符串映射的数组&#xff0c;这里使用hash表进行映射也是可以的 &#xff1b; 2 . 对于回溯 &#xff0c;…

MySQL性能优化-Mysql索引篇(1)

什么是索引&#xff1f; 数据库中的索引&#xff0c;就好比一本书的目录&#xff0c;它可以帮我们快速进行特定值的定位与查找&#xff0c;从而加快数据查询的效率。索引就是帮助数据库管理系统高效获取数据的数据结构。如果我们不使用索引&#xff0c;就必须从第 1 条记录开始…

什么台灯护眼效果好?一文搞懂如何正确挑选护眼台灯

现在的孩子学习状态可以用四个字来形容&#xff0c;“学业繁重”&#xff0c;不少孩子从上小学开始&#xff0c;晚上完成功课到八九点都是在正常不过的事情了&#xff0c;因此室内的光线环境是非常重要的&#xff0c;直接影响了视力健康尤其是书桌上的那一盏台灯&#xff0c;有…

012 Linux_线程控制

前言 本文将会向你介绍线程控制&#xff08;创建&#xff08;请见上文&#xff09;&#xff0c;终止&#xff0c;等待&#xff0c;分离&#xff09; 线程控制 线程终止 pthread_t pthread_self(void); 获取线程自身的ID 如果需要只终止某个线程而不终止整个进程,可以有三种…

SparkShop开源可商用,匹配小程序H5和PC端带分销功能!

SparkShop(星火商城)B2C商城是基于thinkphp6 elementui的开源免费可商用的高性能商城系统&#xff1b;包含小程序商城、H5商城、公众号商城、PC商城、App&#xff0c;支持页面diy、秒杀、优惠券、积分、分销、会员等级。营销功能采用插件化的方式方便扩展、二次开发 源码下载…

表单验证、属性绑定(一个属性根据另一个属性有无进行操作)

表单验证 一个属性根据另一个属性有无进行操作&#xff08;属性绑定&#xff09; 1、问题描述 ​ 需求&#xff1a;表单里面后两个属性需要根据前面一个属性进行有无判断。如果前面属性没有输入值&#xff0c;则不需要进行操作&#xff1b;如果前面属性有输入值&#xff0c;则…

Docker Swarm全解析:实现微服务高可用与故障转移的秘密武器

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Docker入门到精通》 《k8s入门到实战》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、基本概念和介绍 1、Docker Swarm 是什么&#xff0c;它与 …

Rabbitmq消息丢失-消费者消息丢失(二)

说明&#xff1a;消费端在处理消息的过程中出现异常&#xff0c;例如&#xff1a;业务逻辑异常&#xff0c;或者消费者被停机&#xff0c;或者网络断开连接等&#xff0c;以上等情况使消息没有得到正确恰当的处理&#xff0c;也会使消息丢失。 分析&#xff1a;分析就是说明中…

【MATLAB第97期】基于MATLAB的贝叶斯Bayes算法优化BiGRU双向门控循环单元的多输入单输出回归预测模型,含GRU与BiGRU多层结构优化选择

【MATLAB第97期】基于MATLAB的贝叶斯Bayes算法优化BiGRU双向门控循环单元的多输入单输出回归预测模型&#xff0c;含GRU与BiGRU结构层数优化 前言 前面在【MATLAB第10期】讲解了基于贝叶斯Bayes算法优化LSTM长短期记忆网络的多输入单输出回归预测模型。 本次模型难点包括&am…

Ps:图案图章工具

图案图章工具 Pattern Stamp Tool可将各种预设图案或自定义的图案&#xff0c;通过画笔涂抹的方式填充到图像中。 快捷键&#xff1a;S 图案图章工具提供了一种快速、灵活的方式来为图像局部添加纹理和装饰。 这个工具类似于仿制图章工具&#xff0c;但区别在于&#xff0c;它使…

初阶数据结构:二叉树(补充扩展)

目录 1. 堆排序1.1补充&#xff1a;建堆的时间复杂度1.2 堆排序&#xff1a;升序与降序 2. TopK问题3. 二叉树的链式结构及其遍历方式3.1 二叉树的链式结构3.2 二叉树的前序遍历2.2 二叉树的中序遍历2.3 后序遍历2.4 层序遍历 4. 二叉树OJ练习4.1 单值二叉树4.2 判断两棵二叉树…

three.js如何实现简易3D机房?(一)基础准备-上

目录 一、tips 二、功能说明 1.模型初始化 2.功能交互 三、初始化准备 1.目录结构 2.创建三要素 3.创建轨道控制器 4.初始化灯光 5.适配 6.循环渲染 一、tips 1.three.js入门的相关基础性知识就不在此过多赘述了&#xff0c;可以自行提前了解 three.js docs&…

PyTorch深度学习实战(38)——StyleGAN详解与实现

PyTorch深度学习实战&#xff08;38&#xff09;——StyleGAN详解与实现 0. 前言1. StyleGAN1.1 模型介绍1.2 模型策略分析 2. 实现 StyleGAN2.1 生成图像2.2 风格迁移 小结系列链接 0. 前言 StyleGAN (Style-Generative Adversarial Networks) 是生成对抗网络 (Generative Ad…