Leetcode Hot100之滑动窗口

滑动窗口题目的特点如下,经常用于解决字符串的子串问题

  1. 滑动窗口通过双指针指定窗口的左右边界;
  2. 通过某种数据结构存储窗口中的元素,数据结构的形式具体问题具体分析,经常是set、dict等;
  3. 窗口的右边界匀速扩张,而左边界通常是通过某种规律进行向右收缩;

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

  • 题目描述
    给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。
    示例 1:

      输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
    
  • 解题思路

    1. 看到子串,想到可以通过滑动窗口来解决;
    2. 看到无重复字符想到可以通过set来存储滑动窗口中的元素,可以快速查找当前元素是不是已经在窗口中;
    3. 滑动窗口从左往右滑动,如果当前元素不在窗口中,直接压入窗口中;如果已经在了,从左边开始弹出元素,直到当前元素不在窗口中,再将元素压入窗口中。这样保证窗口中的元素都是不重复的,那么统计窗口大小的最大值就是最长无重复子串的长度。
  • 代码

    class Solution:def lengthOfLongestSubstring(self, s: str) -> int:n = len(s)if n == 0:return 0chars = set()i = 0res = 0for j in range(n):if s[j] not in chars:chars.add(s[j])else:while s[j] in chars:chars.remove(s[i])i += 1chars.add(s[j])# 每完成一次元素更新后,更新最大长度res = max(res, j - i + 1)return res
    

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

  • 题目描述
    给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
    异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。
  • 解题思路
    1. 本题仍然是寻找子串问题,可以用滑动窗口来解决;
    2. 看到字母异位词就想到可以通过dict来存储窗口中元素出现的次数;
    3. 本题中的窗口长度是确定的,利用这个限制条件可以找到符合要求的答案;
    4. 时间复杂度:
      具体的操作可见下面代码中的注释
  • 代码
    class Solution:def findAnagrams(self, s: str, p: str) -> List[int]:n = len(s)if n == 0:return []dic_p = {}for char in p:dic_p[char] = dic_p.get(char, 0) + 1dic_w = {}i = 0res = []for j in range(n):if len(dic_w) == 0:i = jif s[j] in dic_p:# 如果当前字符在p中,而且字符在窗口中的数量是符合条件的,那么将该字符加入窗口中if dic_w.get(s[j], 0) < dic_p[s[j]]:dic_w[s[j]] = dic_w.get(s[j], 0) + 1else:# 如果加上当前的字符后,当前的字符在窗口中的数量已经超过了p中的数量,那么将窗口左边界右移,直到窗口中的字符数量符合要求while dic_w.get(s[j], 0) >= dic_p[s[j]]:dic_w[s[i]] -= 1i += 1dic_w[s[j]] = dic_w.get(s[j], 0) + 1# 上面的代码保证了字母的计数是满足要求的,如果此时窗口长度等于p的长度,说明找到了一个符合条件的子串if j - i + 1 == len(p):res.append(i)else:# 如果出现了一个没有在p中的字符,那么将该窗口清除,重新开始计数dic_w = {}return res
    

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

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

相关文章

TVS的原理及选型

目录 案例描述 TVS管的功能与作用&#xff1a; TVS选型注意事项&#xff1a; 高速TVS管选型 最近项目中遇到TVS管选型错误的问题。在此对TVS的功能及选型做一个分享。 案例描述 项目中保护指标应为4-14V&#xff0c;而选型的TVS管位SMJ40CA&#xff0c;其保护电压为40V未…

网络学习(15)|有http/1为什么还会有http/2

HTTP/1&#xff08;具体来说是HTTP/1.1&#xff09;在互联网的早期阶段是非常成功的&#xff0c;它标准化了客户端和服务器之间的请求-响应模型&#xff0c;使得Web能够迅速扩展和普及。然而&#xff0c;随着Web的复杂性和流量的增加&#xff0c;HTTP/1.1的一些设计上的局限性开…

《计算广告》第3版读书笔记

1.基本概念 &#xff08;1&#xff09;效果广告:马上带来大量的购买或其他转化行为&#xff0c;即短期看到效果的广告。比如李佳琦头部直播卖货。 &#xff08;2&#xff09;品牌广告:宣传品牌形象&#xff0c;提升中长期购买率与利润空间。比如杨紫代言。 &#xff08;3&am…

python创建虚拟环境venv

为什么要创建虚拟环境 使用python创建虚拟环境是为了让项目的依赖隔离开来&#xff0c;互不干扰&#xff0c;使得每个项目都运行在一个独立的Python环境中。 创建虚拟环境 1. 命令行创建 step1. 创建 # 1. 进入到你的项目目录中 cd myproject # 使用python创建一个虚拟环境…

音视频入门基础:H.264专题(1)——H.264官方文档下载

音视频入门基础&#xff1a;H.264专题系列文章&#xff1a; 音视频入门基础&#xff1a;H.264专题&#xff08;1&#xff09;——H.264官方文档下载 音视频入门基础&#xff1a;H.264专题&#xff08;2&#xff09;——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

DDMA信号处理以及数据处理的流程---距离速度测量

Hello,大家好,我是Xiaojie,好久不见,欢迎大家能够和Xiaojie一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程,本系列文章将从目标生成、信号仿真、测距、测速、cfar检测、测角、目标聚类、目标跟踪这几个模块逐步介绍,这个系列的…

Python和Java怎么选择?

Python和Java的较量一年又一年地持续&#xff0c;那么要怎么选择学习哪种编程语言呢&#xff1f; 两种语言在不同的应用场景中都能展现出强大的能力&#xff0c;几乎涵盖了所有其他编程语言所能实现的功能&#xff0c;包括但不限于网站开发、图形用户界面设计、图像处理、大数…

完整迁移方案+工具:Citrix替换,无感迁移!

随着用户的替换进程进入到演进的阶段&#xff0c;用户面临的重大挑战包括&#xff1a; &#xff08;1&#xff09;大量数据的迁移需要精确规划&#xff0c;以避免数据丢失或损坏&#xff1b; &#xff08;2&#xff09;迁移效率低下&#xff0c;不仅会增加迁移成本&#xff0c;…

B端系统的UI框架选择,不要输在了起跑线,如何破?

所谓成也框架、败也框架&#xff0c;框架就是这么的优点和缺点鲜明&#xff0c;市面上的框架多如牛毛&#xff0c;谁家的最优秀呢&#xff1f;为何框架搞出来的UI界面同质化呢&#xff0c;如何避免这种情况&#xff0c;如何在框架的基础上进一步提升颜值和体验呢&#xff0c;本…

LabVIEW回热系统热经济性分析及故障诊断

开发了一种利用LabVIEW软件的电厂回热系统热经济性分析和故障诊断系统。该系统针对火电厂回热加热器进行优化&#xff0c;通过实时数据监控与分析&#xff0c;有效提高机组的经济性和安全性&#xff0c;同时降低能耗和维护成本。系统的实施大幅提升了火电厂运行的效率和可靠性&…

MyBatis-RedisCache源码分析

回顾 在前面&#xff0c;我们通过 redis​ 集成了 MyBatis​ 的二级缓存&#xff0c;MyBatis的二级缓存整合redis &#xff0c;接下来&#xff0c;我们来分析一下 RedisCache​ 的源码。 源码分析 RedisCache 主要是通过实现 Cache 接口来做的。数据存储和获取主要是通过操作…

Linux Vim最全教程

Vim是一款在Linux系统中广泛使用的文本编辑器&#xff0c;其多模式的特性使得用户能够高效地进行文本编辑工作。以下是一个关于Vim的最全教程&#xff0c;涵盖了Vim的基本认识、安装、配置、使用技巧等方面。 一、Vim的基本认识 Vim是vi编辑器的升级版&#xff0c;它是一款多…

引领潮流!Xinstall创新技术让App免填邀请码成为可能,轻松吸引海量用户!

在快速变化的互联网环境下&#xff0c;App推广和运营面临着诸多挑战。如何迅速搭建起满足用户需求的运营体系&#xff0c;提高获客转化的效率和用户留存&#xff0c;成为了众多企业急待解决的问题。而邀请码作为App推广中常见的手段&#xff0c;其繁琐的填写过程常常让用户望而…

代码随想录算法训练营第六十四天 | 图论理论基础、深搜理论基础、广搜理论基础、98. 所有可达路径

图论理论基础 我写在了个人语雀笔记中 https://www.yuque.com/yuqueyonghu8mml9e/bmbl71/ex473q4y0ebs0l3r?singleDoc# 深搜理论基础 https://www.yuque.com/yuqueyonghu8mml9e/bmbl71/zamfikz08c2haptn?singleDoc# 98. 所有可达路径 题目链接&#xff1a;98. 所有可达…

【202406A]冰山计划

A. [202406A]冰山计划 文件操作 时间限制: 1000ms 空间限制: 524288KB 输入文件名: 202406A.in 输出文件名: 202406A.out Accepted 100 分 题目描述 一入夏&#xff0c;气温就飙到了40℃&#xff0c;鱼大大要被热成鱼干了&#xff0c;他现在急需降温&#xff0c;而且得是大…

Orangepi Zero2

1、Orangepi Zero2 Orangepi Zero2 是基于全志H616的一款产品 特性&#xff1a; CPU全志H616四核64位1.5GHz高性能Cortex-A53处理器 GPU MaliG31MP2 SupportsOpenGLES1.0/2.0/3.2、OpenCL2.0 运行内存1GB DDR3(与GPU共享) 存储TF卡插槽&#xff0c;测试128G可支持、2MB SPI Fl…

ImageNet-1k 测试集 两大坑

1、官方网站提交test set标签时&#xff0c;千万不能提交zip文件&#xff0c;即便明文说可以 https://image-net.org/challenges/LSVRC/eval_server.php 不然就会浪费一次提交机会&#xff0c;直接提交submission.txt就可以&#xff0c;注意每排5个预测结果&#xff0c;用于计…

Java安全

Java安全 Java2Sec靶场搭建 靶场地址 https://github.com/bewhale/JavaSec 查看数据库配置文件&#xff0c;mysql&#xff0c;用户名密码根据自己数据库密码更改 使用小皮面板的mysql&#xff0c;新建一个数据名为javasec的数据库 运行javasec.sql文件 下载运行jar包即可 …

图卷积网络(Graph Convolutional Network, GCN)

图卷积网络&#xff08;Graph Convolutional Network, GCN&#xff09;是一种用于处理图结构数据的深度学习模型。GCN编码器的核心思想是通过邻接节点的信息聚合来更新节点表示。 图的表示 一个图 G通常表示为 G(V,E)&#xff0c;其中&#xff1a; V 是节点集合&#xff0c;…

2024 New Relic Java 生态系统报告

New Relic 发布了 2024 年度 Java 生态系统报告&#xff0c;数据来源于使用 New Relic 监控的线上 Java 应用。从这个报告中&#xff0c;我们可以看到 Java 发展的一些趋势。 在 Java 版本方面&#xff0c;新版本的使用率越来越高。Java 11 的使用率是 32.9%&#xff0c;Java 1…