当前位置: 首页 > news >正文

“滑动窗口”算法实例

1 问题

给定一个字符串“S”,找出其中不含有重复字符的最长子串的长度。例如:S=‘ABCABCBB’,则不含重复字符的最长字串长度为3.。S=‘ABCDFG’,则不含重复字符的最长字串长度为6。要求设计一个Python程序实现该功能?

2 方法

按照一般方法,可以采取暴力求解,即把所有不重复的字串全部找出来,再在其中找出最长的字串。可是该方法的时间复杂度和空间复杂度都十分大,面对较长的字符串则会浪费过多时间。

对于该现象,即可使用“滑动窗口”算法。滑动窗口算法也是一种思想,是双指针的拓展和延伸。滑动:指这个窗口是移动的,也就是移动是按照一定方向来的。窗口:窗口大小并不是固定的,可以不断扩容直到满足一定的条件;也可以不断缩小,直到找到一个满足条件的最小窗口;当然也可以是固定大小。

面对前面所提出的问题,使用“滑动窗口”算法,大致思路为:

  1. 设置两个指针和一个空列表

  2. 固定左指针,不断右移右指针,同时更新最长不重复字符串长度

  3. 如果出现重复字符,再右移左指针,如此重复,直到遍历完字符串的所有字符。

    最后输出最长不重复字符串长度即可。

这样就降低了问题的复杂度,也降低了循环的嵌套深度。

代码清单 1

'''
通过固定左端元素,再右端元素不断右移,算出左端和右端间的总数
然后左端再不断右移,不断计算之间的总数。最后算出最长长度
'''
s = input() # 输入字符串
max_length =float('-inf') # 定义一个初指为负无穷
start = 0 # 定义左指针为0
l = list() # 定义一个空列表,用于是否重复的判断
for end in range(len(s)): # 右指针通过for循环,逐步向右移动
   while s[end] in l: # 当右指针移到某个值时,且该值已经在前面出现过
       l.remove(s[start]) # 移除左指针对应的重复值
       start += 1 # 并且将左指针向右移动一个单位
   max_length = max(max_length, end-start+1) # 每次右指针移动后,统计不重复的字符串的最长长度
   l.append(s[end]) # 将右指针每次遍历过的值加入列表中,用于重复判断
if max_length == float('-inf'): # 如果最大值对于负无穷,则代表无最长不重复字符串
   print('0')
else:
   print(max_length) # 打印最大不重复字符串长度
'''
测试结果:
abcabcbb 输出:3
aaaaaaaa 输出:1
'''

3 结语

通过测试,发现“滑动窗口”算法可以很好的解决该问题,与此同时,相对于暴力求解,其时间复杂度和空间复杂度也得到了优化。总结发现,一般给出的数据结构是数组或者字符串,且求取某个子串或者子序列最长最短等最值问题或者求某个目标值时。都可以使用“滑动窗口”算法。

相关文章:

“滑动窗口”算法实例

1 问题 给定一个字符串“S”,找出其中不含有重复字符的最长子串的长度。例如:S‘ABCABCBB’,则不含重复字符的最长字串长度为3.。S‘ABCDFG’,则不含重复字符的最长字串长度为6。要求设计一个Python程序实现该功能? 2 方法 按照一…...

分布式搜索引擎elasticsearch(一)

5.1 初始elasticsearch elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。 5.1.1正向索引 5.1.2elasticsearch采用倒排索引: 文档(document):每条数据就是一个…...

PTA 7-236 验证哥德巴赫猜想

哥德巴赫猜想之一是指一个偶数(2除外)可以拆分为两个素数之和。请验证这个猜想。 因为同一个偶数可能可以拆分为不同的素数对之和,这里要求结果素数对彼此最接近。 输入格式: 首先输入一个正整数T,表示测试数据的组数&#xff0…...

微信小程序 纯css画仪表盘

刚看到设计稿的时候第一时间想到的就是用canvas来做这个仪表盘&#xff0c;虽然本人的画布用的不是很好但还可以写一写&#x1f600;。话不多说直接上代码。最后有纯css方法 <!--wxml--> <canvas canvas-id"circle" class"circle" >// js dat…...

成为AI产品经理——模型稳定性评估(PSI)

一、PSI作用 稳定性是指模型性能的稳定程度。 上线前需要进行模型的稳定性评估&#xff0c;是否达到上线标准。 上线后需要进行模型的稳定性的观测&#xff0c;判断模型是否需要迭代。 稳定度指标(population stability index ,PSI)。通过PSI指标&#xff0c;我们可以获得不…...

操作系统——进程同步

目录 一、信号量相关函数 1. 创建信号量集 2. 获取信号量集 3. 等待、通知信号量集 4. 控制信号量集 二、简单进程同步 1. 创建信号量集 2. P操作 3. V操作 4. 删除信号量集 5. 测试&#xff1a; 三、生产者与消费者 1. 创建、删除共享内存及信号量集 2. 单一生产…...

如何能够对使用ShaderGraph开发的Shader使用SetTextureOffset和SetTextureScale方法

假设在ShaderGraph中的纹理的引用名称为"_BaseMap"&#xff0c;同时对这个"_BaseMap"纹理使用了采样的节点"SampleTexture2D"&#xff0c;然后该采样节点的uv接入的TilingAndOffset节点&#xff0c;此时的关键步骤是新建一个Vector4属性&#xf…...

力扣572:另一棵树的子树

力扣572&#xff1a;另一棵树的子树 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所…...

Linux系统中进程间通信(Inter-Process Communication, IPC)

文章目录 进程间通信介绍进程间通信目的进程间通信发展 管道什么是管道 匿名管道用fork来共享管道原理站在文件描述符角度-深度理解管道站在内核角度-管道本质管道读写规则管道特点 命名管道创建一个命名管道匿名管道与命名管道的区别命名管道的打开规则 命名管道的删除用命名管…...

【React + Typescript】使用WebPack包管理、各种扩展插件组成的初始模板,开源协议:CC-BY-4.0

React Typescript Webpack 模板 模板展示项目结构使用的部分扩展包页面配置代码Layout 公共容器组件路由Jspackage.json 开源模板下载TIP 模板展示 项目结构 使用的部分扩展包 &#x1f4c2; System ├── &#x1f4c2; Plugin │ ├── &#x1f4c4; file-loader | 在处…...

python 制作3d立体隐藏图

生成文件的3d图&#xff0c;例子&#xff1a; 文字&#xff1a; 隐藏图&#xff1a; 使用建议&#xff1a; &#xff11;、建议不用中文&#xff0c;因为中文太复杂&#xff0c;生成立体图效果不好。 &#xff12;、需要指定FONT_PATH&#xff0c;为一个ttf文件&#xff0c;…...

layui+ssm实现数据批量删除

layuissm实现数据的批量删除 //数据表格table.render({id: adminList,elem: #adminList,url: ctx "/admin/getAdminList", //数据接口cellMinWidth: 80,even: true,toolbar: #toolbarDemo,//头部工具栏limit: 10,//每页条数limits: [10, 20, 30, 40],defaultToolba…...

国产AI边缘计算盒子,双核心A55丨2.5Tops算力

边缘计算盒子 双核心A55丨2.5Tops算力 ● 2.5TopsINT8算力&#xff0c;支持INT8/INT4/FP16多精度混合量化。 ● 4路以上1080p30fps视频编解码&#xff0c;IVE模块独立提供图像基础算子加速。 ● 支持Caffe、ONNX/PyTorch深度学习框架&#xff0c;提供resnet50、yolov5等AI算…...

C++作业4

代码整理&#xff0c; 将学过的三种运算符重载&#xff0c;每个至少实现一个运算符的重载 代码&#xff1a; #include <iostream>using namespace std;class Stu {friend const Stu operator*(const Stu &L,const Stu &R);friend bool operator<(const Stu …...

计算机网络(二)| 物理层上 | 数据通信基础知识 调制 频率范围 信噪比

文章目录 1 物理层基本概念2.数据通信基础知识2.1 数据通信基本概念2.2 信道基本概念2.2.1 基带调制&#xff08;编码&#xff09;方式2.2.2 带通调制方式 2.3 信道的极限速率影响因素2.3.1 **频率范围**2.3.2 **信噪比** 内容笔记来源于谢希任老师《计算机网络》 物理层重点 …...

[STM32-1.点灯大师上线】

学习了江协科技的前4课&#xff0c;除了打开套件的第一秒是开心的&#xff0c;后面的时间都是在骂娘。因为51的基础已经几乎忘干净&#xff0c;c语言已经还给谭浩强&#xff0c;模电数电还有点底子&#xff0c;硬着头皮上吧。 本篇主要是讲述学习点灯的过程和疑惑解释。 1.工…...

Web测试自动化工具Selenium的使用

Web测试自动化工具Selenium的使用 Selenium是一个Web应用测试的自动化工具&#xff0c;它通过模拟点击实现对Web应用的功能测试。测试时&#xff0c;除了Selenium&#xff0c;还需要对应的浏览器驱动&#xff0c;如在Chrome实现自动点击&#xff0c;则需要chromedriver。 Sel…...

VUE2+THREE.JS 按照行动轨迹移动人物模型并相机视角跟随人物

按照行动轨迹移动人物模型并相机视角跟随人物 1. 初始化加载模型2. 开始移动模型3. 人物模型启动4. 暂停模型移动5. 重置模型位置6. 切换区域动画7. 摄像机追踪模型8. 移动模型位置9.动画执行 人物按照上一篇博客所设定的关键点位置&#xff0c;匀速移动 1. 初始化加载模型 //…...

Hadoop YARN组件

1. 请解释Yarn的基本架构和工作原理。 YARN&#xff0c;也被称为"Yet Another Resource Negotiator"&#xff0c;是Apache HadoopYARN&#xff0c;也被称为"Yet Another Resource Negotiator"&#xff0c;是Apache Hadoop的一部分&#xff0c;它被设计为一…...

Java架构师技术架构路线

目录 1 概论2 如何规划短中长期的技术架构路线图3 如何规划面向未来的架构4 如何修订路线图执行过程中的偏差5 如何落地路线图-阿里系糙快猛之下的敏捷模式想学习架构师构建流程请跳转:Java架构师系统架构设计 1 概论 首先,规划一个短中长期的技术路线图是非常重要的。短中…...

【Mojo+Python混合部署失效真相】:92%开发者忽略的编译期符号冲突、运行时上下文隔离与调试断点丢失问题

第一章&#xff1a;MojoPython混合部署失效真相全景概览Mojo 作为新兴的高性能系统编程语言&#xff0c;设计初衷是与 Python 生态无缝互操作&#xff1b;然而在真实生产部署中&#xff0c;“Mojo Python 混合部署”常出现静默失败、ABI 不兼容、运行时崩溃或性能断崖式下降等…...

S2-Pro提示词(Prompt)工程入门:从零到一掌握高效对话技巧

S2-Pro提示词&#xff08;Prompt&#xff09;工程入门&#xff1a;从零到一掌握高效对话技巧 1. 为什么需要学习提示词工程 你可能已经发现&#xff0c;同样的AI模型&#xff0c;在不同人手里表现天差地别。有人能让它写出专业报告&#xff0c;有人却只能得到敷衍的回复。这中…...

Xinference-v1.17.1智能家居控制系统开发

Xinference-v1.17.1智能家居控制系统开发 1. 智能家居控制新体验 想象一下&#xff0c;早上醒来窗帘自动拉开&#xff0c;阳光洒进房间&#xff0c;咖啡机开始工作&#xff0c;音响播放你喜欢的音乐。这不是科幻电影&#xff0c;而是用Xinference-v1.17.1构建的智能家居控制系…...

Gemma-3-270m量化压缩实战:4位精度模型部署

Gemma-3-270m量化压缩实战&#xff1a;4位精度模型部署 1. 开篇&#xff1a;小模型的大能量 最近在折腾边缘设备部署时&#xff0c;发现一个挺有意思的现象&#xff1a;很多团队还在用"大炮打蚊子"&#xff0c;明明只需要处理一些简单的文本分类任务&#xff0c;却…...

对话意图识别新选择:轻量ESFT模型高效易用

对话意图识别新选择&#xff1a;轻量ESFT模型高效易用 【免费下载链接】ESFT-token-intent-lite 基于HuggingFace平台&#xff0c;deepseek-ai团队推出的ESFT-token-intent-lite模型&#xff0c;是ESFT-vanilla-lite的精简版&#xff0c;专为意图识别优化&#xff0c;性能卓越&…...

LumiPixel优化升级:如何利用Z-Image模型生成更细腻的像素人像

LumiPixel优化升级&#xff1a;如何利用Z-Image模型生成更细腻的像素人像 1. 引言&#xff1a;像素艺术的复兴与挑战 像素艺术作为一种独特的数字艺术形式&#xff0c;近年来在游戏、NFT和数字设计领域迎来复兴。然而传统像素创作面临两大核心挑战&#xff1a; 细节表现力不…...

League Akari:5大核心解决方案提升英雄联盟游戏体验

League Akari&#xff1a;5大核心解决方案提升英雄联盟游戏体验 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari是一…...

Qwen3.5-9B+OpenClaw组合方案:3类高性价比自动化场景实测

Qwen3.5-9BOpenClaw组合方案&#xff1a;3类高性价比自动化场景实测 1. 为什么选择这个组合&#xff1f; 去年夏天&#xff0c;我花了整整两周时间在本地部署各种开源大模型&#xff0c;试图找到一个既能在预算内运行、又能稳定执行自动化任务的方案。经过反复测试&#xff0…...

[FFXIVChnTextPatch]:国际服中文补丁解决方案——从入门到精通

[FFXIVChnTextPatch]&#xff1a;国际服中文补丁解决方案——从入门到精通 【免费下载链接】FFXIVChnTextPatch 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIVChnTextPatch 一、问题引入&#xff1a;当语言成为游戏体验的隐形壁垒 你是否曾在探索艾欧泽亚大陆时…...

MindSpore mint 模块学习

1. 模块概述mindspore.mint是 MindSpore 框架提供的一个功能接口子模块&#xff0c;旨在提供大量与业界主流深度学习框架&#xff08;如 PyTorch&#xff09;保持一致的 functional、nn、优化器等 API。使熟悉主流框架的用户能够快速上手。性能特点&#xff1a;在图编译模式为 …...