首页 > 编程语言 >算法---滑动窗口练习-2(无重复字符的最长子串)

算法---滑动窗口练习-2(无重复字符的最长子串)

时间:2024-03-14 23:59:35浏览次数:28  
标签:子串 字符 right hash len --- 滑动 left

无重复字符的最长子串

1. 题目解析

题目地址无重复字符的最长子串

在这里插入图片描述

2. 讲解算法原理

在这里插入图片描述
在这里插入图片描述

首先定义了变量 left、right 和 len,分别表示当前无重复子串的左边界、右边界和最大长度。

获取输入字符串 s 的长度 n。

定义一个大小为 128 的数组 hash,用于记录字符出现的次数。数组的下标表示字符的 ASCII 值,初始值都为 0。

进入循环,循环条件是 right 小于 n。

在循环中,首先将当前字符 s[right] 在 hash 数组中的计数加1。

接着,进入一个内层循环,该循环的条件是当前字符 s[right] 在 hash 数组中的计数大于1,即表示出现了重复字符。

在内层循环中,将左边界字符 s[left] 在 hash 数组中的计数减1,并将左边界 left 向右移动一位。

内层循环结束后,表示当前窗口内已经没有重复字符了。通过 right-left+1 计算当前无重复子串的长度,并更新 len 的值。

将右边界 right 向右移动一位,继续下一轮循环。

循环结束后,如果输入字符串长度为 1,则返回 1,否则返回最长无重复子串的长度 len。


3. 编写代码

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

标签:子串,字符,right,hash,len,---,滑动,left
From: https://blog.csdn.net/originalHSL/article/details/136669090

相关文章

  • MATLAB用GARCH-EVT-Copula模型VaR预测分析股票投资组合
    全文链接:http://tecdat.cn/?p=30426原文出处:拓端数据部落公众号对VaR计算方法的改进,以更好的度量开放式基金的风险。本文把基金所持股票看成是一个投资组合,引入Copula来描述多只股票间的非线性相关性,构建多元GARCH-EVT-Copula模型来度量开放式基金的风险,并与其他VaR估计方法的预......
  • 3月14-第五讲复习回顾和第六讲TCP协议
    结合gpt和其他方面的资料,对于昨天的网络层和链路层做出补充:1.数据传输时两层基本都经过,网络层规划路由表(路由器跳转路径),装配ip地址(用来规划线路),封装和传输数据包在节点与目标设备之间,把链路层的数据帧转换为数据包。链路层则是节点之间的,物理层面,使用Mac这种物理地址定位。2.注......
  • jumserver-master版本 lina组件启动报错
    node-vv16.15.1 npm-v8.11.0yarn-v1.22.22 yarnserveyarnrunv1.22.22$vue-cli-serviceserveINFOStartingdevelopmentserver...10%building2/2modules0activeERRORSyntaxError:Cannotuseimportstatementoutsideamodule/opt/lina-ma......
  • 一款针对加解密综合利用后渗透工具-DecryptTools
    0x01前言为什么会写这一款综合加解密工具,因为在很多比赛如果算拿下靶标不仅需要获取服务器权限还需要登录网站后台这时候很多系统要么数据库连接字符串加密,要么登陆用户加密而这款工具就是为了解决问题。加解密功能:该工具不仅有解密还提供多种加密方式。配置文件信息功......
  • KTL 一个支持C++14编辑公式的K线技术工具平台 - 第九版,数据分析工具。支持通达信日线
    K,K线,Candle蜡烛图。T,技术分析,工具平台L,公式Language语言使用c++14,Lite小巧简易。项目仓库:https://github.com/bbqz007/KTL国内仓库:https://gitee.com/bbqz007/KTL CoreAnimationforWindows: https://github.com/bbqz007/xwzqt5 一个超简单的Qt5窗口语法: https://gith......
  • 回归预测 | Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据
    回归预测|Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据回归预测目录回归预测|Matlab实现GSWOA-KELM混合策略改进的鲸鱼优化算法优化核极限学习机的数据回归预测效果一览基本介绍程序设计参考资料效果一览基本介绍GSWOA-KELM多变......
  • 牛客小白月赛61-E-排队
    很好的一道题啊,学到了不少东西!!!!首先是一个结论逆序对总数=  n!/2 *不相等的数字对数(1)不相等的数字对数怎么求    结论    不相等的数字对数=C(n,2)-∑C(2,cnt(i))(i数字的出现次数)(2)n!/2怎么处理,有取模的除运算怎么处理???......
  • OCR-free相关论文梳理
    引言通用文档理解,是OCR任务的终极目标。现阶段的OCR各种垂类任务都是通用文档理解任务的子集。这感觉就像我们一下子做不到通用文档理解,退而求其次,先做各种垂类任务。现阶段,Transformer技术的发展,让通用文档理解任务变得不再是那么遥不可及,伴随而来的是出现了很多OCR-free的工作......
  • 【Java面试题-基础知识02】Java抽象类和接口六连问?
    1、抽象类和接口分别是什么?抽象类是一种类,可以包含抽象方法和非抽象方法,抽象方法是没有具体实现的方法,需要在子类中被具体实现。接口是一种完全抽象的类,其中的所有方法都是抽象方法,没有方法体,它只是定义了一组方法的契约。2、接口中一定不可以有实现方法吗?不一定,Java8引入......
  • 如何证明所有自然数的和等于-1/12?
    前言Author:Rainypaster(lhy)本人过菜,不足之处请指教。证明第一种证明过程令\(1+2+3+4+5+6+7....=N\)则\(\color{white}{....}\)\(4+\)\(\color{white}{.....}\)\(8+\)\(\color{white}{.....}\)\(16+....=4N\)\(N-4N=1-2+3-4+5-.....=-3N\)我们把它写两遍,第二遍错......