滑动窗口(2)_无重复字符的最长字串

news2024/9/20 21:12:35

个人主页:C++忠实粉丝
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C++忠实粉丝 原创

滑动窗口(2)_无重复字符的最长字串

收录于专栏【经典算法练习
本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌

目录

1. 题目链接:

2. 题目描述 :

3. 解法 :

    解法一(暴力枚举) :

    算法思路 :

    具体步骤 :

    代码展示 :

    结果分析 :

    解法二(滑动窗口) :

    算法思路 :

    图解流程:

    代码展示:

    结果分析:

    滑动窗口的正确性:

    时间复杂度分析:


1. 题目链接:

OJ链接:无重复字符的最长字串

2. 题目描述 :

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

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

3. 解法 :

    解法一(暴力枚举) :

    算法思路 :

枚举[从每一个位置]开始往后,无重复字符的字串可以到达什么位置.找出其中长度最大的即可.

在往后寻找无重复字串能到达的位置时,可以利用[哈希标]统计出字符出现的频次,来判断什么时候字串出现了重复元素.

    具体步骤 :

  1. 定义两个指针i,j遍历数组
  2. j++,向后移动寻找与i重复的数
  3. j找到与i相同的数,更新字串长度.
  4. 然后i++,j = i,重新重新寻找下一个数的最长无重复字串

    代码展示 :

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int len = 0, n = s.size();
        for(int i = 0; i < n; i++)
        {
            int hash[128] = {0};
            for(int j = i; j < n; j++)
            {
                hash[s[j]]++;
                if(hash[s[j]] > 1) break;
                len = max(len, j - i + 1); 
            }
        }
        return len;
    }
};

    结果分析 :

!!!!!!!!!!!!!!!!!!!!!!

居然过了?这已经是第二个算法题能直接用暴力通过了

还是老样子,分析一下题目的数据范围:

0 <= s.length <= 5 * 104

字符串的长度区间范围:[0, 5*10^4],没超过10^5就给了暴力枚举的机会

我们暴力枚举的时间复杂度为O(N^2),这样数据级别大于10^9小于10^10是有机会通过的.

如果这道题更狠的话,直接把数据修改为10^5之内的字符,那我们的暴力枚举直接退役了

    解法二(滑动窗口) :

    算法思路 :

我们发现暴力算法真的很无脑,比如:

研究的对象依旧是一段连续的区间,因此继续使用[滑动窗口]思想来优化.

让滑动窗口满足: 窗口内所有元素都是不重复的.

做法: 右端元素right进入窗口的时候,哈希表统计这个字符的频次:

        如果这个字符出现的频次超过1,说明窗口内有重复元素,那么就从左侧开始划出窗口.直到right这个元素的频次变为1,然后更新结果.

        如果没有超过1,说明当前窗口没有重复元素,可以直接更新结果

基本思路:

  1. left = 0, right = 0;
  2. 进窗口 ------> 让字符进入哈希表
  3. 循环判断
    1. 窗口内出现重复字符(提前结束循环)
    2. 出窗口 ------- > 从哈希表中删除该字符
    3. 更新结果

    图解流程:

 

 

 

 

    代码展示:

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

    结果分析:

    滑动窗口的正确性:

我们这里使用滑动窗口解决了暴力枚举的重复遍历

    时间复杂度分析:

时间复杂度: O(N)

空间复杂度: 我们开了一个hash数组,但只有128个空间,也就是常数级别,可以忽略不记,所以时间复杂度为O(1)

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

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

相关文章

Cortex-A7:处理器组成架构

0 参考资料 ARM Cortex™-A Series Version: 4.0 Programmer’s Guide.pdf 1 Cortex-A7处理器组成架构 1.1 Cortex-A7处理器简介 Cortex-A7处理器是ARM公司推出的用于入门级智能手机、平板电脑以及其他低功耗移动设备的处理器架构。 1.2 Cortex-A7处理器组成框图 注&#xf…

idea一个窗口打开多个仓库的代码

一、背景 最近新进了一家外包公司&#xff0c;这个项目由于是微服务的&#xff0c;且每个微服务都独立用一个仓库进行代码管理。看项目的时候&#xff0c;我们不能一个窗口&#xff0c;只打开一个仓库代码&#xff0c;那样看起来会非常麻烦&#xff0c;一开始对项目全貌的了解…

osg中显示3dtiles和cesiumIon

本文分析osgEarth中的osgEarthCesium模块&#xff0c;分析3dtiles和cesiumIon整个流程&#xff0c;并展示CesiumIon地形显示的例子。 目录 1 osgEarthCesium结构分析2 CesiumIon地形显示 内容 1 osgEarthCesium结构分析 1.1 CesiumNative3DTileslayer图层 osgEarth中采用图层…

数据结构修炼——顺序表和链表的区别与联系?

目录 一、线性表二、顺序表2.1 概念及结构2.2 接口实现2.3 一些思考以及顺序表的缺点 三、链表3.1 概念及结构3.2 链表的分类3.3 链表的实现3.3.1 无头单向非循环链表3.3.2 带头双向循环链表 四、顺序表和链表的区别 一、线性表 线性表&#xff08;linear list&#xff09;是n…

RDMA应用场景及效果

GPU Direct 参考&#xff1a;网络架构如何支持超万卡的大规模 AI 训练&#xff1f;| AICon_芯片与网络_InfoQ精选文章 GPU 网络的情况已经发生了很大变化。每个 GPU 都有自己的内部互联&#xff0c;例如 NVIDIA 的 A100 或 H800&#xff0c;它们内部的 NVLink 互联可以达到 6…

命令语境中的“可以”的字词含义分析

摘要 在语言交流中&#xff0c;词汇的使用经常受到语境的影响。本文探讨了“可以”一词在上司与下属之间的互动中所表达的命令含义。通过分析语料和实例&#xff0c;发现“可以”在某些情况下并不传达许可的含义&#xff0c;而是被用作一种隐性命令。本文讨论了这一现象的成因…

【数据结构】快速排序详解(递归版本)

目录 0. 前言 1. 快速排序的基本思想 2. 快速排序的不同版本的实现 2.1 hoare版本 2.1.1 单趟排序动图演示 2.1.2 递归展开多个子区间进行单趟排序 2.1.3 代码的具体实现 2.1.3.1 霍尔法单趟排序代码 2.3.1.2 霍尔法递归代码 2.2 挖坑法 2.2.1 单趟排序方法动图演示…

二叉树的层序遍历(c)

我们先来了解一下什么是二叉树的层序遍历&#xff01; 层序遍历的理解 下图是一棵二叉树&#xff0c; 层序遍历这棵二叉树的顺序是&#xff1a; 1→2→3→4→5→6→7&#xff0c; 看图也很简单易懂&#xff0c; 第一层→第二层→第三层。 层序遍历的实现 如果二叉树的结…

Python3将Excel数据转换为文本文件

文章目录 python3安装使用Python将Excel数据转换为文本文件&#xff1a;逐步指南openpyxl库简介前提条件脚本解析代码详细解析实际应用场景使用示例 结论 python3安装 centos安装python3 Python3基础知识 使用Python将Excel数据转换为文本文件&#xff1a;逐步指南 在数据处理…

文本多语言 AI 摘要 API 数据接口

文本多语言 AI 摘要 API 数据接口 文本 / 文本摘要 AI 生成文本摘要 AI 处理 / 智能摘要。 1. 产品功能 支持多语言摘要生成&#xff1b;支持长文本处理&#xff1b;基于 AI 模型&#xff0c;持续迭代优化&#xff1b;不存储 PDF 文件&#xff0c;处理完即释放&#xff0c;保…

公路数据集、桥梁数据集、隧道数据集、地铁数据集、水坝数据集、挡土墙数据集

数据集概览 这个大规模的数据集专注于建筑裂缝检测&#xff0c;涵盖了地上设施&#xff08;如公路桥梁、铁路桥梁、水坝、挡土墙&#xff09;和地下SOC设施&#xff08;如公路/铁路隧道、地铁、水隧道&#xff09;。数据集包含了来40个市、县、区的不同SOC设施的52万张图像&…

显卡GPU电源、ATX电源、主板电源的一些关系?如何连接显卡/GPU电源?

文章目录 背景ATX电源在ATX接出来的电源线 实测数据PC主机开关机和复位&#xff1a;3.3V显卡16-pin 12VHPWR 如何连接显卡/GPU电源综述 背景 折腾装机、装显卡&#xff0c;ATX电源&#xff0c;各种转来转去。搞得云里雾里&#xff0c;如何删繁就简。找到根源。 本文介绍ATX电源…

数学公式篇

【一元二次方程的根】 x − b b 2 − 4 a c 2 a x {\frac{-b\sqrt{b^2-4ac}}{2a}} x2a−bb2−4ac ​​ △ b 2 − 4 a c △ b^2-4ac △b2−4ac 其中根的判别式 △ > 0 &#xff0c;有两个实根 △>0&#xff0c;有两个实根 △>0&#xff0c;有两个实根 其中根…

AI 时代程序员的应变之道

一、AI 浪潮来袭&#xff0c;编程界风云变幻 随着 AIGC 大语言模型如 ChatGPT、Midjourney、Claude 等的涌现&#xff0c;AI 辅助编程工具日益普及&#xff0c;程序员的工作方式正经历着深刻的变革。 分析公司 OReilly 日前发布的《2023 Generative AI in the Enterprise》报告…

Excel爬虫使用实例-百度热搜

原来excel也能爬虫抓取数据&#xff0c;而且简单好用 目标网址&#xff1a; https://top.baidu.com/board?tabrealtime 下面是一个excel爬虫的小小例子&#xff0c;爬取了百度热搜的前50&#xff08;还有一个置顶的热搜没有1&#xff0c;2&#xff0c;3编号&#xff09; 实现…

JVM面试真题总结(十二)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 对比Java内存模型与JVM内存模型的不同点 Java内存模型&#xff08…

PyTorch 池化层详解

在深度学习中&#xff0c;池化层&#xff08;Pooling Layer&#xff09;是卷积神经网络&#xff08;CNN&#xff09;中的关键组成部分。池化层的主要功能是对特征图进行降维和减少计算量&#xff0c;同时增强模型的鲁棒性。本文将详细介绍池化层的作用、种类、实现方法&#xf…

BLE 协议之物理层

目录 一、概述二、Physical Channel1、物理通道2、物理通道的细分 三、调制1、调制方式2、GFSK 四、发射机五、接收机六、收发机 一、概述 物理层&#xff08;Physical Layer&#xff09;是 BLE 协议栈最底层&#xff0c;它规定了 BLE 通信的基础射频参数&#xff0c;包括信号频…

Minio环境搭建(单机安装包、docker)(一)

前言&#xff1a; 项目中客户不愿意掏钱买oss&#xff0c;无奈只能给他免费大保健来一套。本篇文章只是记录验证可行性&#xff0c;毕竟minio太少文档了&#xff0c;参考着官网来。后面还会再出一套验证集群部署的文章。 一、资料 MinIO官网&#xff1a; MinIO | S3 Compatib…

Windows 安装 ZooKeeper 以及 IDEA 安装 zoolytic 连接工具

目录 前言 下载 解压 配置 启动服务 zoolytic 前言 在前公司做微服务开发时&#xff0c;使用的都是 Spring Cloud 的生态&#xff0c;服务的注册与发现中心用的 Eureka&#xff0c;也有使用 Nacos 的&#xff0c;远程调用则是用的 OpenFeign&#xff0c;换工作后&#x…