滑窗问题【Leetcode3最长子串/438找出所有异位词】

3. 无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
请注意,你的答案必须是 子串 的长度,子序列不是子串。

思路:滑窗范围[pl, pr),用cnt数组维护滑窗内的每个字符的出现次数(实际上,不是1就是0),对于即将进入滑窗中的字符s[pr],如果滑窗中已经出现过了,那么pl右移缩小滑窗范围,使得s[pr]加入滑窗之后,s[pr]的出现次数仍为1,不会超出即可。

class Solution {
public:int lengthOfLongestSubstring(string s) {int cnt[130] = {0};int pl = 0, pr = 0, maxlen = 0, n = s.length();while (pr < n) {if (cnt[s[pr]] == 0) {cnt[s[pr]]++;pr++;} else {do {cnt[s[pl]]--;pl++;} while (s[pr] != s[pl - 1]);}if (maxlen < pr - pl)maxlen = pr - pl;}return maxlen;}
};

438. 找到字符串中所有字母异位词

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

思路:滑窗范围是[i, j),对于每个即将加入滑窗的字符s[j],看一下滑窗中该字符的个数(用cnts数组来维护),如果已经满了,那么滑窗左侧就要往右移动(缩小范围)了。

class Solution {int cntp[130], cnts[130];vector<int> ans;public:vector<int> findAnagrams(string s, string p) {int i = 0, j = 0, ns = s.length(), np = p.length();// 计算出p的每个字符的个数for (auto ch : p)cntp[ch]++;while (j <= ns) {if (cnts[s[j]] == cntp[s[j]]) // 满了{if (j - i == np)ans.push_back(i);while (s[i] != s[j]) {cnts[s[i]]--;i++;}cnts[s[i]]--;i++;}cnts[s[j]]++;j++;}return ans;}
};

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

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

相关文章

React 的入门介绍

React 是什么 React是一个用于构建用户界面的JavaScript库。它由Facebook开发&#xff0c;并于2013年首次发布。React将用户界面拆分为小的可重用组件&#xff0c;每个组件都有自己的状态&#xff0c;并根据状态的变化来更新界面。 React使用了虚拟DOM&#xff08;Virtual DO…

RabbitMQ如何实现消费端限流

什么是消费端限流&#xff0c;这个一种保护消费者的手段&#xff0c;假如说&#xff0c;现在是业务高峰期了&#xff0c;消息有大量堆积&#xff0c;导致MQ消费需要不断的进行消息消费&#xff0c;很容易被打挂&#xff0c;甚至重启之后还是会被大量消息涌入&#xff0c;继续被…

Xilinx 7系列FPGA配置(ug470)

Xilinx 7系列FPGA配置&#xff08;ug470&#xff09; 配置模式串行配置模式接口从-连接方式主-连接方式串行菊花链&#xff08;非同时配置&#xff09;串行配置&#xff08;同时配置&#xff09;时序 主SPI配置模式SPIx1/x2 连接图SPIx1模式时序SPIx4 连接图SPI操作指令操作fla…

FC-AE-1553 协议

FC-AE-1553 协议 MIL-STD-1553B总线协议总线结构字格式消息传输方式 FC协议FC协议栈拓扑结构服务类型帧/序列/交换FC帧格式 FC-AE-1553网络构成帧类型命令帧状态帧数据帧 Information UnitsNC1NC2NC3-4NC5-7NT1-7 传输模式1. NC-NT2. NT-NC3. NT-NT4. 无数据字的模式命令5. 带数…

python并发编程之多进程、多线程、异步和协程详解

在Python中&#xff0c;有多种并发编程的方式可供选择&#xff0c;包括多进程、多线程、异步和协程。下面将对这些方式进行详细解释。 多进程&#xff1a;多进程是通过创建多个进程来实现并发的方式。每个进程都有自己独立的内存空间&#xff0c;可以并行执行任务。Python中的m…

detectron2 DiffusionDet 训练自己的数据集

配环境 git clone https://github.com/ShoufaChen/DiffusionDet# 创建环境 conda create -n diffusion python3.9 conda activate diffusion conda install pytorch1.11.0 torchvision0.12.0 torchaudio0.11.0 cudatoolkit11.3 -c pytorch pip install opencv-python# 安装det…

STM32CubeMX学习笔记12 ---低功耗模式

在实际使用中很多产品都需要考虑低功耗的问题&#xff0c;STM32F10X提供了三种低功耗模式&#xff1a;睡眠模式&#xff08;Sleep mode&#xff09;、停机模式&#xff08;Stop mode&#xff09;和待机模式&#xff08;Standby mode&#xff09;。这些低功耗模式可以有效减少系…

jnitrace的用法(查看jni的执行流程,方便unidbg补环境)

一、简单执行 jnitrace -l <要trace的so库> <包名> jnitrace -l libxxx.so com.xxx.app二、插入js脚本执行 jnitrace -p E:\kill_sll.js -l libxxx.so com.xxx.app三、attach模式执行 默认使用spawn执行&#xff0c;attach模式可能有有时bug没反应 jnitrace -l li…

Casper Network(CSPR)即将迎来两项重大升级,以实现功能上的进一步完善

Casper Network&#xff08;CSPR&#xff09;即将实现更加完备的功能升级&#xff0c;现已进入倒计时阶段。 Casper Network&#xff08;CSPR&#xff09;将升级到其最先进以及更全的版本&#xff0c;即“功能完备”的版本&#xff0c;让Casper Network&#xff08;CSPR&#…

腾讯云十大优惠活动曝光,TOP10值得买云服务器配置报价

腾讯云服务器多少钱一年&#xff1f;61元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器165元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网txyfwq.co…

Java实现读取转码写入ES构建检索PDF等文档全栈流程

背景 之前已简单使用ES及Kibana和在线转Base64工具实现了检索文档的demo&#xff0c;并已实现WebHook的搭建和触发流程接口。 传送门&#xff1a; 基于GitBucket的Hook构建ES检索PDF等文档全栈方案 使用ES检索PDF、word等文档快速开始 实现读取本地文件入库ES 总体思路&…

索引类型介绍

4、说说你知道的MySQL的索引类型&#xff0c;并分别简述一下各自的场景。 普通索引&#xff1a;没有任何限制条件的索引&#xff0c;该索引可以在任何数据类型中创建。 唯一索引&#xff1a;使用UNIQUE参数可以设置唯一索引。创建该索引时&#xff0c;索引列的值必须唯一&…

44、网络编程/数据库相关操作练习20240306

一、代码实现数据库的创建&#xff08;员工信息表&#xff09;&#xff0c;并存储员工信息&#xff08;工号、姓名、薪资&#xff09;&#xff0c;能实现增加人员信息、删除人员信息、修改人员薪资操作。 代码&#xff1a; #include<myhead.h>int do_update(sqlite3 *p…

基于canvas纯前端实现验证码的绘制

验证码功能是实现登录功能中比较常见的一个问题 验证码的整体思路是&#xff1a; 1.前端登录页面发起获取验证码图片请求. 2.服务端收到请求后,生成一个唯一id,对应的验证码图片 以及验证码图片对应的值(这个值使用缓存保存,id-值一一对应,缓存可使用redis或本地缓存,本地缓存…

Python中的模块包第三方库详解

模块&包 模块 一个.py文件就是一个模块&#xff0c;里面是一些函数和变量&#xff0c;需要的时候可以导入。 模块命名规范: 1.以英文开头&#xff0c;不出现中文 2.模块名不应与系统内置函数重名 包 包本身就是一个文件夹&#xff0c;如果文件夹内有__init__.py文件&…

Java电梯模拟升级版

Java电梯模拟升级版 文章目录 Java电梯模拟升级版前言一、UML类图二、代码三、测试 前言 在上一版的基础上进行升级&#xff0c;楼层采用享元模式进行升级&#xff0c;并对楼层对象进一步抽象 一、UML类图 二、代码 电梯调度器抽象类 package cn.xx.evevator;import java.ut…

K倍区间 刷题笔记

法一 前缀和暴力搜索 &#xff08;数据大会超时&#xff09; #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> using namespace std; const int N100010; int a[N],s[N]; int n,k; int main(){ cin>>n>>…

实现一个作用域插槽的场景

vue项目中&#xff0c;插槽slot有三种分别是&#xff1a;默认插槽、具名插槽、作用域插槽。默认插槽和具名插槽在平时的开发中用的比较多&#xff0c;作用域插槽用的相对较少&#xff0c;以前我对作用域插槽不是很理解&#xff0c;现在理解了一下。下面通过代码来实现一个作用域…

QLabel的setPixmap和setPicture有什么不同,请详细讲解

QLabel类提供了一个方便的方式来显示文本和图像。在Qt中&#xff0c;QLabel的setPixmap()和setPicture()方法都可以用来在标签中显示图像&#xff0c;但它们之间存在一些关键的区别&#xff0c;主要体现在它们接受的参数类型和用途上。 setPixmap() 参数类型&#xff1a;setP…

Linux系统之部署复古游戏平台

Linux系统之部署复古游戏平台 前言一、项目介绍1.1 项目简介1.2 项目特点1.3 游戏平台介绍二、本次实践介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 安装Docker环境3.2 检查Docker服务状态3.3 检查Docker版本3.4 检查docker compose 版本四、构建…