LeetCode hot100---滑动窗口专题(C++语言)

devtools/2024/12/22 20:53:12/

滑动窗口

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

(1)题目描述以及输入输出

(1)题目描述:
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。
(2)输入输出描述:
输入: s = "abcabcbb"
输出: 3 关键思路:
通过vector记录字符串中每个字符上次出现的位置,字符的ASCII作为索引,出现的位置作为记录值。
遍历字符串,每次滑动窗口内添加一个字符,都会更新left的值,使得left指向该位置后窗口内无重复值

(2)代码块

class Solution {
public:int lengthOfLongestSubstring(string s){int left = 0;int right = 0;int max_size = 0;vector<int> record(128,-1);			// 记录字符串中每个字符上次出现的位置for(;right<s.length();++right){left = max(left,record[s[right]]+1);	// 更新左窗口位置,使得窗口内无重复值max_size = max(max_size,right-left+1);	// 计算窗口大小record[s[right]] = right;       		// 更新当前字符的出现位置}return max_size;}
};

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

(1)题目描述以及输入输出

(1)题目描述:
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
(2)输入输出描述:
输入: s = "cbaebabacd", p = "abc"
输出: [0,6]关键思路:
定义两个vector统计两个字符串中字符出现个数,先统计p.length个
接着从s的第p.length进行遍历,每次遍历将窗口最右的字符出现个数统计进vector,将窗口最左元素去除,维持窗口大小不变
判断字符个数数组是否相同。

(2)代码块

class Solution {
public:vector<int> findAnagrams(string s, string p) {vector<int> s_record(26,0);vector<int> p_record(26,0);vector<int> result;int i = 0;for(i = 0;i<p.length();++i){s_record[s[i] - 'a']++;p_record[p[i] - 'a']++;}if(s_record == p_record)result.push_back(0);for(;i<s.length();++i){s_record[s[i] - 'a']++;s_record[s[i-p.length()] - 'a']--;if(s_record == p_record)result.push_back(i-p.length()+1);}return result;}
};

http://www.ppmy.cn/devtools/121104.html

相关文章

React响应式修改数组和对象

在React中&#xff0c;响应式地修改数组数据是一个常见的需求&#xff0c;它涉及到状态&#xff08;state&#xff09;的管理和更新。React的状态是不可变的&#xff0c;这意味着你不能直接修改状态对象中的数组元素&#xff0c;而是需要创建一个新的数组来更新状态。下面将详细…

oracle解决关联查询报invalid number问题

出现问题的原因和背景 oracle进行关联查询的时候因为字段存在多个用逗号切割的id&#xff0c;导致查询的过程中报无效数字或非法数字 问题复现 新建表A CREATE TABLE "A" (id NUMBER NOT NULL,name VARCHAR2(255 BYTE) )INSERT INTO "A" VALUES (1, 上海…

51单片机的光照强度检测【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块光照传感器按键蜂鸣器LED等模块构成。适用于光照强度检测、光照强度测量报警等相似项目。 可实现功能: 1、LCD1602实时显示光照强度信息 2、光照强度传感器&#xff08;电位器模拟&#xff09;采集光照信息 3、可…

【信号与系统第四章】10、离散傅里叶变换的性质

一、线性性质 1、例题 &#xff08;1&#xff09; 二、时移性质 1、证明 三、频移性质 1、证明 四、时域差分 五、时域扩展 1、证明 2、例题 六、频域微分 1、证明 2、例题 &#xff08;1&#xff09; 七、时域卷积性质 1、证明 2、例题 &#xff08;1&#xff09; &#xf…

Android SystemUI组件(10)禁用/重启锁屏流程分析

该系列文章总纲链接&#xff1a;专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节持续迭代之前章节的思维导图&#xff0c;主要关注左侧上方锁屏分析部分 应用入口处理流程解读 即可。 在 Android 系统中&#xff0c;禁用锁屏…

Redis篇(Redis原理 - 数据结构)(持续更新迭代)

目录 一、动态字符串 二、intset 三、Dict 1. 简介 2. Dict的扩容 3. Dict的rehash 4. 知识小结 四、ZipList 1. 简介 2. ZipListEntry 3. Encoding编码 五、ZipList的连锁更新问题 六、QuickList 七、SkipList 八、RedisObject 1. 什么是 redisObject 2. Redi…

OpenJudge | Binary Tree

总时间限制: 1000ms 内存限制: 65536kB 描述 Background Binary trees are a common data structure in computer science. In this problem we will look at an infinite binary tree where the nodes contain a pair of integers. The tree is constructed like this: The …

LSM6DSV16X基于MLC智能笔动作识别(2)----MLC数据采集

LSM6DSV16X基于MLC智能笔动作识别.2--MLC数据采集 概述视频教学样品申请源码下载输出速率执行流程速率设置量程设置检测状态数据单位采集数据静止(Steady)闲置(Idle)书写(Writing)其他(other) 概述 MLC 是“机器学习核心”&#xff08;Machine Learning Core&#xff09;的缩写…