【算法|滑动窗口No.3】leetcode3. 无重复字符的最长子串

news/2024/5/20 7:57:20 标签: 算法, 滑动窗口, leetcode

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【手撕算法系列专栏】【LeetCode】
🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助
🍓希望我们一起努力、成长,共同进步。
在这里插入图片描述

原题链接:点击直接跳转到该题目

目录

  • 1️⃣题目描述
  • 2️⃣算法分析
  • 3️⃣代码编写

1️⃣题目描述

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

示例1:

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

示例2:

输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例3:

输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

提示:

  • 0 <= s.length <= 5 * 1 0 4 10^{4} 104
  • s 由英文字母、数字、符号和空格组成

2️⃣算法分析

遍历字符串 s,右边界 right 从 0 开始,逐步向右移动:

  • 每次将右边界对应的字符出现次数加 1,即 hash[s[right]]++,表示进窗口。

  • 判断 hash[s[right]] 是否大于 1,如果是,说明该字符重复了,需要将窗口的左边界向右移动,直到窗口中不包含重复字符,同时更新 hash 数组中左边界字符出现次数的计数。

  • 更新 ret 的值,即 ret = max(ret,right - left + 1)。

返回 ret,即为无重复字符的最长子串的长度。

3️⃣代码编写

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int n = s.size();
        int hash[128] = { 0 };
        int left = 0,right = 0,ret = 0;
        for(left = 0,right = 0;right < n;right++)
        {
            hash[s[right]]++; // 进窗口
            while(hash[s[right]] > 1) hash[s[left++]]--; // 出窗口
            ret = max(ret,right - left + 1);
        }
        return ret;
    }
};

最后就顺利通过啦!!!


http://www.niftyadmin.cn/n/5142369.html

相关文章

Vue:Vue项目中的Cesium配置备忘录

作者&#xff1a;CSDN _乐多_ 本文记录了 Vue 项目中配置 Cesium 相关过程和细节。 文章目录 一、安装Cesium二、配置 index.html 一、安装Cesium npm install Cesium在node_modules中找到Cesium&#xff0c;将其中的Cesium文件夹复制到public中。 二、配置 index.html 主要…

Android照搬,可删

1private void initview() {myradioGroup (RadioGroup) this.findViewById(R.id.MainActivity_RadioGroup);//通过id找到UI中的单选按钮组 2res getResources();// 得到Resources对象&#xff0c;从而通过它获取存在系统的资源 icon_home_true res.getDrawable(R.mipmap.ic…

时间滑动窗口限制请求次数

一、时间窗口固定 使用map存储&#xff0c;key为唯一值&#xff0c;value为一个实体&#xff0c;存着开始时间和次数&#xff0c;取出来判断是否为空&#xff0c;如果为空就新建一个对象进去并且如果不为空并且当前时间-取出来的时间>最大时间限制值,重新赋值value&#xff…

【SA8295P 源码分析 (三)】113 - AIS Camera Proc Chain 初始化 及 工作流程分析

【SA8295P 源码分析 三】113 - AIS Camera Proc Chain 初始化 及 工作流程分析 一、ProcChain 初始化流程1.1 opMode 参数的由来1.2 QCARCAM_OPMODE_RAW_DUMP 的 m_pPProc[] 初始化过程:AIS_EVENT_RAW_FRAME_DONE -> AIS_EVENT_PPROC_JOB -> AIS_PPROC_USR_DONE二、各 O…

C++数据结构算法篇Ⅰ

C数据结构算法篇Ⅰ &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C算法 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 主要内容讲解数据结构中的链表结构 文章目录 C数据…

.vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?

尊敬的读者&#xff1a; 在当今数字化的世界中&#xff0c;网络威胁变得越来越复杂&#xff0c;其中勒索病毒一直是网络犯罪分子的有力武器之一。而在这篇文章中&#xff0c;我们将深入探讨.vollhavhelp-V-XXXXXXXX、.vollhavhelp-V-XXXXXXXX、.arricklu-V-XXXXXXXX勒索病毒&a…

nodejs升级或降级

node有一个模块叫n&#xff0c;是专门用来管理node.js的版本。 升级或降级步骤 1 、安装n模块 npm install -g n 2、 升级node.js到最新稳定版 n stable Ps: n后面也可以跟随版本号&#xff08;用于升级或降级&#xff09;比如&#xff1a; n v16.12.0

跨境电商大作战:2023黑色星期五准备指南

黑色星期五&#xff0c;作为全球购物狂欢的象征&#xff0c;已经成为了电商业务的一年一度的重要节点。尤其对于跨境电商来说&#xff0c;这一天意味着巨大的商机和挑战。为了在这个竞争激烈的时刻脱颖而出&#xff0c;跨境电商必须做好充分的准备。Nox聚星在这里给大家分享几个…