【C++】每日一题 3 无重复字符最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。
14ms
注意使用unordered_map时把字符和该字符的索引作为键值对,这样可以节省一次查找重复字符索引的循环

#include <string>
#include <unordered_map>using namespace std;int lengthOfLongestSubstring(string s) {int n = s.length();if (n == 0) {return 0;}unordered_map<char, int> charIndex;int maxLength = 0;int start = 0;for (int end = 0; end < n; ++end) {char currentChar = s[end];if (charIndex.find(currentChar) != charIndex.end()) {start = max(start, charIndex[currentChar] + 1);}charIndex[currentChar] = end;maxLength = max(maxLength, end - start + 1);}return maxLength;
}

在上面的代码中,我们维护了一个滑动窗口,通过start和end指针来表示窗口的开始和结束位置。我们使用charIndex哈希表来存储每个字符最后一次出现的位置。当遇到重复字符时,我们将窗口的起始位置更新为重复字符的下一个位置,并计算当前最大子串长度。最终返回最大子串的长度。

在C++的std::map中,可以使用[]操作符来进行索引,但需要注意以下两点:

  • 如果key存在,则[]操作符返回对应key的值;
  • 如果key不存在,则[]操作符会创建一个新的key-value对,并将其插入到map中,value初始化为该类型的默认值。

因此,在上面提到的代码中,使用charIndex[currentChar] = end;这一行代码时,如果currentChar在charIndex中不存在,会创建一个新的key-value对并赋值。这种方式适合于我们在遍历字符串过程中动态更新字符最后出现的位置信息。

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

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

相关文章

git fatal: detected dubious ownership in repository at ‘xxx‘ 彻底解决方法

前言 在 windows 重置后&#xff0c; git 仓库无法正常使用 git 的所有 命令&#xff0c;运行任何 git 命令&#xff0c;都会提示如下&#xff1a; $ git log fatal: detected dubious ownership in repository at D:/rk/rk3568/nanopi/uboot-rockchip D:/rk/rk3568/nanopi/u…

mysql中find_in_set()函数用法详解及增强函数

一、find_in_set() 我们知道mysql提供了一个好用的函数 FIND_IN_SET(str,strlist)&#xff0c; 该函数的作用是查询字段(strlist)中是否包含(str)的结果&#xff0c; 返回结果为null或记录 。 str 要查询的字符串 strlist 需查询的字段&#xff0c;参数以”,”分隔&#xf…

Linux学习之线程

目录 线程概念 1.什么是线程&#xff1f; 2.线程的优缺点 3.线程异常 4.线程用途 线程操作 1.如何给线程传参 2.线程终止 3.获取返回值 4.分离状态 5.退出线程 线程的用户级地址空间&#xff1a; 线程的局部存储 线程的同步与互斥 互斥量mutex 数据不一致的主要过…

编译随笔(一)makefile基础知识

编译随笔系列文章目录 1. makefile基础知识 文章目录 编译随笔系列文章目录前言参考资料前置知识交叉编译链程序编译预处理&#xff08;Preprpcessing&#xff09;编译&#xff08;Compilation&#xff09;汇编&#xff08;Assemble&#xff09;链接&#xff08;Linking&#…

如何使用Postman创建Mock Server?

这篇文章将教会大家如何利用 Postman&#xff0c;通过 Mock 的方式测试我们的 API。 什么是 Mock Mock 是一项特殊的测试技巧&#xff0c;可以在没有依赖项的情况下进行单元测试。通常情况下&#xff0c;Mock 与其他方法的主要区别就是&#xff0c;用于取代代码依赖项的模拟对…

CVPR2023 | 提升图像去噪网络的泛化性,港科大上海AILab提出 MaskedDenoising,已开源!

作者 | 顾津锦 首发 | AIWalker 链接 | https://mp.weixin.qq.com/s/o4D4mNM3jL6sYuhUC6VgoQ 当前深度去噪网络存在泛化能力差的情况&#xff0c;例如&#xff0c;当训练集噪声类型和测试集噪声类型不一致时&#xff0c;模型的性能会大打折扣。作者认为其原因在于网络倾向于过度…

Python 中 _ 开头的变量,你了解多少?

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

Python实现极限学习机分类模型(ELMClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 极限学习机&#xff08;ELMClassifier&#xff09;算法是一种基于单隐层前馈神经网络&#xff08;SLFN…

大规模NN必知必会调参及优化规律

从理论分析入手把握大规模神经网络优化的规律&#xff0c;可以指导实践中的超参数选择。反过来&#xff0c;实践中的超参数选择也可以指导理论分析。本篇文章聚焦于大语言模型&#xff0c;介绍从 GPT 以来大家普遍使用的训练超参数的变化。 规模律研究的是随着神经网络规模的增…

【C语言】操作符相关知识点

移位操作符 << 左移操作符 >>右移操作符 左移操作符 移位规则&#xff1a; 左边抛弃、右边补0 右移操作符 移位规则&#xff1a; 首先右移运算分两种&#xff1a; 1.逻辑移位 左边用0填充&#xff0c;右边丢弃 2.算术移位 左边用原该值的符号位填充&#xff0c;…

上门服务小程序|上门服务系统成品功能包含哪些?

随着移动互联网的快速发展&#xff0c;上门服务小程序成为了一种创新的家政服务模式。它不仅为用户带来了极大的便利&#xff0c;还能在提高服务效率和质量方面发挥作用。通过上门服务小程序&#xff0c;用户可以轻松预约按摩或理疗服务&#xff0c;无需繁琐操作&#xff0c;只…

knife4j生产环境禁止打开页面

Knife4j是一个集Swagger2 和 OpenAPI3为一体的增强解决方案&#xff0c;官网地址&#xff1a;Knife4j 集Swagger2及OpenAPI3为一体的增强解决方案. | Knife4j 考虑到安全性问题&#xff0c;在实际服务部署到生产环境后就需要禁用到swagger页面的展示&#xff0c;这个时候只需…

Spring使用RestTemplate返回的嵌套实体对象为空,转换json报错

项目场景&#xff1a; Spring Boot项目使用RestTemplate调用接口&#xff0c;使用嵌套实体对象接收的返回结果 实体对象TokenUser&#xff0c;其中TokenUserInfo是嵌套的对象&#xff1a; Data public class TokenUser {private Integer code;private TokenUserInfo data;pr…

类和对象(1)(至尊详解版)

相信对于大家而言&#xff0c;对于类和对象都会是一头雾水吧&#xff01;什么是类&#xff1f;或者你有对象吗&#xff1f;那么本期的内容呢&#xff1f;就由我来为大家再次增加对于它们的理解&#xff0c;由于水平上的原因&#xff0c;可能会存在不当之处&#xff0c;敬请读者…

C#双向链表:只用泛型节点类ListNode<T>设计的最短小的双向链表包含初始化链表数据和遍历链表各节点

目录 一、涉及到的知识点&#xff1a; 1.ListNode 类使用自动属性设计 2. 泛型节点类设计的误区 二、仅仅定义泛型节点类&#xff0c;实现最短的双向链表 一、涉及到的知识点&#xff1a; 1.ListNode 类使用自动属性设计 public class ListNode {public object Object { …

类与对象(三)--static成员、友元

文章目录 1.static成员1.1概念&#x1f3a7;面试题✒️1.2static的特性&#x1f3a7;1.3思考&#x1f3a7; 2.友元2.1什么是友元&#xff1f;&#x1f3a7;2.2两种友元关系&#xff1a;&#x1f3a7; 1.static成员 1.1概念&#x1f3a7; &#x1f50e; static关键字用于声明类…

Jmeter性能测试 -1

之前讲的Jmeter算不上是性能测试&#xff0c;只是用Jmeter做接口测试。现在我们开始进入实际的性能测试。开始前你应该对Jmeter有了一定的了解&#xff0c;把前面Jmeter内容看一遍应该可以入门了。 Jmeter与locust locust除了可以做接口的性能测试以外&#xff0c;做性能测试…

MongoDB和Mysql区别与各自优缺点

最近使用数据库来做大模型Chat记录和后续的数据处理&#xff0c;对比mysql和mongodb&#xff0c;整理如下&#xff1a; 数据库mysqlmongoDB介绍- MySQL 是一款安全、跨平台、高效的&#xff0c;并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 My…

ubuntu18.04编译OpenCV-3.4.19+OpenCV_contrib-3.4.19

首先确保安装了cmake工具 安装opencv依赖文件 sudo apt-get install build-essential sudo apt-get install git libgtk-3-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev li…

树莓派(Raspberry Pi)常见的各种引脚介绍

本文将为您详细讲解树莓派&#xff08;Raspberry Pi&#xff09;常见的各种引脚&#xff0c;以及它们的特点、区别和优势。树莓派是一款非常受欢迎的单板计算机&#xff0c;它拥有多个 GPIO&#xff08;通用输入输出&#xff09;引脚&#xff0c;这些引脚可以用于各种电子项目和…