[力扣 Hot100]Day9 找到字符串中所有字母异位词

news/2024/5/20 6:06:42 标签: leetcode, 算法, 滑动窗口

题目描述

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
异位词指由相同字母重排列形成的字符串(包括相同的字符串)。
在这里插入图片描述
出处

思路

跟昨天的思路类似,也是两个指针构成滑动窗口,窗口大小固定为p的长度。将p的字符存到map中作为key,value为其出现的次数。对s进行遍历,窗口内若出现p中字符,对应的value–,若出现非p中字符,窗口滑动到非p中字符之后。窗口内字符检查完后若map中value均为0,窗口左侧索引即为一个候选结果。
实测用map会超时,最后用了定长26的vector。

代码

class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        int m=s.length();
        int n=p.length();
        vector<int> ans,t(26,0),tt(26,0);
        int i;
        for(i=0; i<n; i++){
            t[p[i]-'a']++;//计数
        }
        for(i=0;i<26;i++){
            if(t[i]==0){
                t[i]=-30001;
            }
        }
        int index=0;
        bool flag;
        while (index<=m-n)
        {
            flag=false;
            tt=t;
            i=index;
            for(; i<index+n; i++){
                if(tt[s[i]-'a']!=-30001)
                    tt[s[i]-'a']--;
                else{
                    flag=true; 
                    break;
                }
            }
            if(flag)
                index=i+1;
            else{
                for(auto item:tt){
                    if(item!=0&&item!=-30001)
                        flag=true;//这里顺便用一下flag,为方便理解也可以新定义一个
                }
                if(!flag)//如果全减到了0
                    ans.emplace_back(index);
                index++;
            }
        }  
    return ans;
    }
};

http://www.niftyadmin.cn/n/5334350.html

相关文章

TCP高并发服务器简介(select、poll、epoll实现与区别)

select、poll、epoll三者的实现&#xff1a; select实现TCP高并发服务器的流程&#xff1a; 一、创建套接字&#xff08;socket函数&#xff09;&#xff1a;二、填充服务器的网络信息结构体&#xff1a;三、套接字和服务器的网络信息结构体进行绑定&#xff08;bind函数&…

rust跟我学六:虚拟机检测

图为RUST吉祥物 大家好,我是get_local_info作者带剑书生,这里用一篇文章讲解get_local_info是怎么检测是否在虚拟机里运行的。 首先,先要了解get_local_info是什么? get_local_info是一个获取linux系统信息的rust三方库,并提供一些常用功能,目前版本0.2.4。详细介绍地址:…

locust快速入门--使用分布式提高测试压力

背景&#xff1a; 使用默认的locust启动命令进行压测时&#xff0c;尽管已经将用户数设置大比较大&#xff08;400&#xff09;&#xff0c;但是压测的时候RPS一直在100左右。需要增加压测的压力。 问题原因&#xff1a; 如果你是通过命令行启动的或者参考之前文章的启动方式…

GEE python——利用Landsat 8 卫星进行土地分类案例

Landsat 8 图像的分类示例 在联合国降低因森林砍伐和退化所产生的排放(REDD)计划中,估算全国范围内的森林面积主要基于使用遥感技术的土地覆盖信息。对于墨西哥这样一个幅员辽阔的国家来说,只有通过自动图像分类,才能以标准化和具有成本效益的方式及时提供信息。本文介绍…

1.7 面试经典150题 - H指数

H指数 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xff08;她&#xff09;…

Linux网络编程(二-套接字)

目录 一、背景知识 1.1 端口号 1.2 网络字节序 1.3 地址转换函数 二、Socket简介 三、套接字相关的函数 3.1 socket() 3.2 bind() 3.3 connect() 3.4 listen() 3.5 accept() 3.6 read()/recv()/recvfrom() 3.7 send()/sendto() 3.8 close() 四、UPD客服/服务端实…

SpringBoot+Redisson分布式锁

SpringBootRedisson分布式锁 文章目录 SpringBootRedisson分布式锁1.引入依赖2.编写配置类org.redisson.config.Config类是Redisson框架中用于配置Redisson客户端的类。以下是一些常用的配置项&#xff1a;org.redisson.config.ClusterServersConfig类是Redisson框架中用于配置…

2024年甘肃省职业院校技能大赛信息安全管理与评估 样题三 模块二

竞赛需要完成三个阶段的任务&#xff0c;分别完成三个模块&#xff0c;总分共计 1000分。三个模块内容和分值分别是&#xff1a; 1.第一阶段&#xff1a;模块一 网络平台搭建与设备安全防护&#xff08;180 分钟&#xff0c;300 分&#xff09;。 2.第二阶段&#xff1a;模块二…