无重复字符的最长子串

在这里插入图片描述

  • 步骤 1:初始状态
    字符串 s = “abcabcbb”,哈希表 charSet 初始为空,双指针 left = 0,right = 0。
哈希表(charSet): {}  
字符串:          a b c a b c b b  
指针:           ↑  left/right  
  • 步骤 2:right = 0(字符 ‘a’)

    操作:charSet.insert(‘a’)
    哈希表存储:{‘a’}(字符 ‘a’ 作为键存入)

哈希表(charSet): {a}  
字符串:          a b c a b c b b  
指针:           ↑   ↑  left  right  
  • 步骤 3:right = 1(字符 ‘b’)

    操作:charSet.insert(‘b’)
    哈希表存储:{‘a’, ‘b’}(新增字符 ‘b’)

哈希表(charSet): {a, b}  
字符串:          a b c a b c b b  
指针:           ↑     ↑  left    right  
  • 步骤 4:right = 2(字符 ‘c’)

    操作:charSet.insert(‘c’)
    哈希表存储:{‘a’, ‘b’, ‘c’}(新增字符 ‘c’)

哈希表(charSet): {a, b, c}  
字符串:          a b c a b c b b  
指针:           ↑       ↑  left      right  
  • 步骤 5:right = 3(字符 ‘a’)

    检查:charSet.count(‘a’) → true(‘a’ 已存在)
    操作:移除 left 指向的字符 ‘a’ → charSet.erase(‘a’),哈希表变为 {‘b’, ‘c’}
    left++(left = 1)重新插入 ‘a’ → charSet.insert(‘a’),哈希表变为 {‘b’, ‘c’, ‘a’}

哈希表(charSet): {b, c, a}  
字符串:          a b c a b c b b  
指针:             ↑       ↑  left      right  
  • 步骤 6:right = 4(字符 ‘b’)

    检查:charSet.count(‘b’) → true(‘b’ 已存在)
    操作:移除 left 指向的字符 ‘b’ → charSet.erase(‘b’),哈希表变为 {‘c’, ‘a’}
    left++(left = 2)重新插入 ‘b’ → charSet.insert(‘b’),哈希表变为 {‘c’, ‘a’, ‘b’}

哈希表(charSet): {c, a, b}  
字符串:          a b c a b c b b  
指针:               ↑       ↑  left      right  
#include <string>       // 引入string头文件,用于处理字符串
#include <unordered_set> // 引入unordered_set头文件,用于快速判断字符是否重复
using namespace std;    // 使用std命名空间,简化代码书写class Solution {        // 定义Solution类,封装解题方法
public:                 // 公共成员函数,外部可直接调用// 函数定义:接收字符串s,返回最长无重复字符子串的长度int lengthOfLongestSubstring(string s) {unordered_set<char> charSet; // 哈希集合,存储当前窗口内的所有字符(用于去重判断)int maxLen = 0;              // 记录最长无重复子串的长度,初始为0int left = 0;                // 滑动窗口的左边界指针,初始为0// 右指针right遍历字符串,作为窗口的右边界for (int right = 0; right < s.size(); ++right) {// 若当前字符s[right]已在窗口中(重复),则移动左指针缩小窗口// 直到窗口中不再包含s[right]while (charSet.count(s[right])) {charSet.erase(s[left]); // 移除左指针指向的字符left++;                 // 左指针右移,缩小窗口}// 将当前字符加入窗口(此时窗口中无重复字符)charSet.insert(s[right]);// 更新最长长度:取当前窗口长度(right - left + 1)和历史最大值的较大值maxLen = max(maxLen, right - left + 1);}// 返回最长无重复子串的长度return maxLen;}
};

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

在这里插入图片描述

#include <vector>       // 引入vector容器头文件,用于存储结果和字符计数
#include <string>       // 引入string头文件,处理字符串参数
using namespace std;    // 使用std命名空间,简化代码书写class Solution {        // 定义Solution类,封装解题方法
public:                 // 公共成员函数,外部可直接调用// 函数定义:接收两个字符串s和p,返回s中所有p的字母异位词的起始索引vector<int> findAnagrams(string s, string p) {vector<int> res; // 定义结果容器,存储符合条件的起始索引int sLen = s.size(), pLen = p.size(); // 计算s和p的长度// 边界判断:若s的长度小于p,不可能存在异位词,直接返回空结果if (sLen < pLen) return res;// 定义两个计数数组(26个元素对应a-z),统计字符出现次数vector<int> sCount(26, 0), pCount(26, 0);// 初始化计数:统计p的所有字符,以及s中前pLen个字符的出现次数for (int i = 0; i < pLen; ++i) {pCount[p[i] - 'a']++;  // p[i]-'a'将字符转为0-25的索引(如'a'→0,'b'→1)sCount[s[i] - 'a']++;  // 同步统计s的初始窗口(0到pLen-1)}// 若初始窗口的字符计数与p相同,说明0是有效的起始索引if (sCount == pCount) res.push_back(0);// 滑动窗口:从pLen位置开始遍历s的剩余字符for (int i = pLen; i < sLen; ++i) {// 移除窗口左侧的字符(i-pLen是即将滑出窗口的索引)sCount[s[i - pLen] - 'a']--;// 加入窗口右侧的新字符(当前i位置的字符)sCount[s[i] - 'a']++;// 若当前窗口的字符计数与p相同,记录起始索引(i-pLen+1)if (sCount == pCount) res.push_back(i - pLen + 1);}return res; // 返回所有有效起始索引}
};

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

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

相关文章

SOD-YOLO:增强基于YOLO的无人机影像小目标检测

摘要 https://www.arxiv.org/pdf/2507.12727 小目标检测仍是目标检测领域中的一个挑战性问题。为应对这一挑战&#xff0c;我们提出了一种基于YOLOv8的增强模型SOD-YOLO。该模型在颈部&#xff08;neck&#xff09;中集成了ASF&#xff08;注意力尺度序列融合&#xff09;机制以…

监督微调-指令微调-偏好微调

有监督微调 有监督微调是使用输入及其标签对的典型情况。例如&#xff0c;判断邮件是垃圾邮件还是非垃圾邮件&#xff0c;判断情感是积极还是消极。根据文档的主要主题对其进行分类也是一种常见应用。模型会将输入文本的相应表示&#xff08;隐藏状态或嵌入向量&#xff09;作为…

楼宇自控系统对建筑碳中和目标的实现具重要价值

随着全球气候变化问题日益严峻&#xff0c;建筑行业作为碳排放的重要来源之一&#xff0c;其节能减排工作备受关注。楼宇自控系统&#xff08;Building Automation System&#xff0c;BAS&#xff09;作为智能建筑的核心组成部分&#xff0c;通过集成控制、监测和管理建筑内的各…

【YOLO学习笔记】YOLOv5详解

一、数据增强 mosaic仿射变换与透视变换Mixup mosaic代码位置仿射变换 与 透视变换​代码片段位置 二、网络结构 1. 网络不同尺寸 nsmlx与网络深宽度 yolov5 官方提供了5个目标检测的网络版本&#xff1a;yolov5n、yolov5s、yolov5m、yolov5l、yolov5x &#xff0c;早年是…

WebRTC前处理模块技术详解:音频3A处理与视频优化实践

一、WebRTC前处理模块概述 WebRTC&#xff08;Web Real-Time Communication&#xff09;作为实时音视频通信的核心技术&#xff0c;其前处理模块是提升媒体质量的关键环节。该模块位于媒体采集与编码之间&#xff0c;通过对原始音频/视频数据进行优化处理&#xff0c;解决实时…

ssm复习

Spring Framework系统架构核心容器的学习IOC/DIIOC容器IOC使用对象时,由主动new产生的对象转换为由外部提供对象,此过程中对象的创建的控制权交由外部,此思想称为控制反转, (实现了自己new的解耦) 对象创建的控制权Spring提供一个容器,称为IOC容器 用来充当IOC思想的外部Bea…

ESP32:2.搭建UDP服务器

硬件&#xff1a;ESP32-Devkit-V4 MODEL:ESP32-32U 库&#xff1a;ESP-IDF v5.4.1 系统&#xff1a;windows中的虚拟机 ubuntu 22.04 实现STA&#xff0c;主动连接AP后&#xff0c;打印IP地址&#xff0c;获取IP后&#xff0c;创建socket&#xff0c;搭建UDP 服务器&#xff0…

【Linux】动静态库制作

&#x1f43c;故事背景假设今天你有一位舍友。你需要帮助他完成老师的作业。而他写的代码依赖两个文件&#xff08;mymath.h,mystdio.h&#xff09;。但是这两个文件的功能他不会写&#xff0c;他只会调用。他的调用代码:#include"mystdio.h" #include"mymath.h…

使用Database Navigator插件进行连接sqlite报错invalid or incomplete database

解决方案 &#xff0c;将这个db.sqlite3文件拷贝到盘的文件中 &#xff0c;修改文件夹名字&#xff0c;重新使用绝对路径访问 db.sqlite3&#xff0c;将路径名字的中文去掉 &#xff0c;不能有中文

【Linux】重生之从零开始学习运维之主从MGR高可用

MGR集群部署12、15、18主机环境准备ssh免密码登录\rm -rf .ssh/* ssh-keygen ssh-copy-id 127.1 scp -r .ssh 10.0.0.12:/root/ ssh root10.0.0.12还原基础环境systemctl stop mysqld \rm -rf /var/lib/mysql/* id mysqlvim /etc/my.cnf.d/mysql-server.cnf [mysqld] datadir/v…

如何在虚拟机(Linux)安装Qt5.15.2

1.进入到阿里的网站下载在线安装包 qt-official_releases-online_installers安装包下载_开源镜像站-阿里云 https://mirrors.aliyun.com/qt/official_releases/online_installers/?spma2c6h.13651104.d-5201.2.60ad4773ZZNPNm 2.下载完毕后&#xff0c;进入到下载地址&…

【运维进阶】DHCP服务配置和DNS域名解析

DHCP服务配置和DNS域名解析 DHCP 服务介绍 在大型网络中&#xff0c;系统静态分配IP地址面临问题&#xff1a; 确保不要同时在多个系统上使用同一个地址。部署新系统通常需要手动分配其IP地址。在云环境中&#xff0c;实例的网络是自动化配置的。 动态主机配置协议&#xff08;…

VisionPro MR环境下虚拟物体与现实的透明度混合

display.rgb (virtualcontent.rgb*1)(passthrough.rgb*(1 - vistualcontent.a) viirtualcontent预乘过a值了&#xff0c;跟透明度混合公式一致 人头检测挖孔不清晰问题&#xff0c;这个a值变成设备层动态检测人头的a值&#xff0c;当面前的渲染压力过大时&#xff0c;会导致…

css怪异模式(Quirks Mode)和标准模式(Standards Mode)最明显的区别

文章目录css怪异模式&#xff08;Quirks Mode&#xff09;和标准模式&#xff08;Standards Mode&#xff09;最明显的区别详细对比示例对比&#xff08;盒模型&#xff09;标准模式&#xff08;Standards Mode&#xff09;怪异模式&#xff08;Quirks Mode&#xff09;如何触发…

一种简单的3dnr去噪算法介绍

一段未经过插补的视频图像可以分解为若干帧&#xff0c;为了能正确地找到并去除图像帧中的噪声污染&#xff0c;由于视频图像各帧的连续性&#xff0c;在去噪的过程中就必须考虑帧图像的空间性和时间性&#xff0c;一个简单的例子&#xff0c;在去噪算法中就必须考虑&#xff0…

【数据结构初阶】--排序(四):归并排序

&#x1f525;个人主页&#xff1a;草莓熊Lotso &#x1f3ac;作者简介&#xff1a;C研发方向学习者 &#x1f4d6;个人专栏&#xff1a; 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》 ⭐️人生格言&#xff1a;生活是默默的坚持&#xff0c;毅力是永久的…

GaussDB 并行创建索引

1 背景当业务数据在单表存储达到一定的数量级时&#xff0c;此时对表创建索引是要花费时间的。GaussDB为了解决这个问题采用并行创建索引技术&#xff0c;以提高创建索引的效率。2 示例步骤1&#xff1a;根据实际情况调整maintenance_work_mem参数该大小。[Rubydtest1 ~]$ gsq…

LOOP Finance:一场 Web3 共和国中的金融制度实验

LOOP Finance 是建构于币安智能链&#xff08;BNB Chain&#xff09;上的定投型DEFI理财协议。 它以凯因斯经济学为启发&#xff0c;设计出一套长期、安全、稳定收益的全新DEFI玩法&#xff0c;兼顾稳健利息回报与DEFI高速成长的潜力。 通过生态机制&#xff0c;LOOP要求每位参…

【golang面试题】Golang递归函数完全指南:从入门到性能优化

引言&#xff1a;递归的本质与挑战 在Golang中&#xff0c;递归函数是一把锋利的双刃剑。它通过函数自身调用实现问题分解&#xff0c;让代码变得简洁优雅&#xff0c;但也容易因无限递归、栈溢出或性能问题让开发者陷入困境。本文将从基础到高级&#xff0c;全面解析Golang递归…

功能安全和网络安全的综合保障流程

摘要网络物理系统是控制机械部件的计算机化系统。这些系统必须既功能安全又网络安全。因此&#xff0c;已建立的功能安全与网络安全标准需求创建网络安全档案&#xff08;ACs&#xff09;&#xff0c;以论证系统是功能安全与网络安全的&#xff0c;即所有功能安全与网络安全目标…