首页 > 其他分享 >LC 3、无重复字符的最长子串

LC 3、无重复字符的最长子串

时间:2023-07-29 14:48:25浏览次数:28  
标签:子串 字符 right hash LC 哈希 end 指针

LC 3、无重复字符的最长子串

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

示例:

输入: s = "abcabcbb"

输出: 3 

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

双指针+哈希表

定义两个指针start 和 end 表示当前处理的字串的头部和尾部,同时end指针不断向后移动,如果当前end指针指向的字符不再hash表中,将当前字符插入到hash表中,同时定义全局变量number,记录当前字串的最大长度。如果指针指向的字符在hash表中,start指针向前进位,end指针也向前进位。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        unordered_set<char> hash;
        int n = 0;
        for(int left = 0, right = 0; right < s.size();){
            while(hash.find(s[right]) != hash.end()){
                hash.erase(hash.find(s[left]));
                left++;
            }
            hash.emplace(s[right]);
            right++;
            n = max(n, right - left);
            
        }
        return n;
    }
};

我们需要注意的是,我们要首先需要确保当前需要遍历的字串中没有重复字母的出现,所以上述代码中的for循环便是起到这个作用

  • 时间复杂度:虽然有两层循环,但每个字符在哈希表中最多只会被插入和删除一次,复杂度为 O(n)
  • 空间复杂度:使用了哈希表进行字符记录,复杂度为 O(n)

Label: 哈希表,双指针,滑动窗口

标签:子串,字符,right,hash,LC,哈希,end,指针
From: https://www.cnblogs.com/superJade/p/17589772.html

相关文章

  • ORA-32004:为字符串实例指定的已过时或不推荐使用的参数
    错误信息【汉】ORA-32004:为字符串实例指定的已过时或不推荐使用的参数【英】ORA-32004:obsoleteordeprecatedparameter(s)specifiedforstringinstance例在启动实例时,提示此错误,但数据库正常启动。版本Oracle【11.2.0.3.0】、【11.2.0.1.0】、【11.2.0.4.0】原因服务器中spfi......
  • 运动控制-PLC工作原理
    下面三个视频讲解了PLC工作原理,https://www.bilibili.com/video/BV1U34y1V7jQ/https://www.bilibili.com/video/BV1qF411F7ri/https://www.bilibili.com/video/BV1sW4y1k7B1/我的理解,我们的PLC程序就像是一个WinForms程序,由PLC操作系统启动后,然后PLC程序一直在运行,......
  • 686. 重复叠加字符串匹配
    给定两个字符串 a和b,寻找重复叠加字符串a的最小次数,使得字符串b成为叠加后的字符串a的子串,如果不存在则返回-1。注意:字符串"abc" 重复叠加0次是"",重复叠加1次是 "abc",重复叠加2次是 "abcabc"。 示例1:输入:a="abcd",b="cdabcdab"输出:3解释:a重复叠加三遍......
  • 导入表T1某字段截取的子字符串到另一张表T2
    第1章、字符串定位和截取--匹配字符的位置--从左往右第一次出现字符.log的位置SELECTINSTR('m/mc/kh.log','.log')FROMT1:--返回8--从右往左第一次出现/的位置SELECTINSTR('m/mc/kh.log','/',-1,1)FROMT1:--返回5--字符串截取,截取从3开始的6位字符......
  • 字符串压缩
    字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。示例1:输入:"aabcccccaaa"输出:"a2b1c5a3"示例2:输入:"abbcc......
  • C# 字符串转码后操作二进制文件
    String转码后写入二进制文件,读二进制文件进行解码返回。publicclassBinaryClass{///<summary>///写二进制文件///</summary>///<paramname="binFile"></param>///<paramname="str">&......
  • windows下shellcode注入的例子(WriteProcessMemory+CreateRemoteThread)
    vs里x64编译如下代码:  #include<iostream>#include<Windows.h>//#include"common.h"intmain(){ //msfvenom-pwindows/x64/execCMD=notepad.exe-fc unsignedcharshellcode[]= "\xfc\x48\x83\xe4\xf0\xe8\xc0\x00\x0......
  • php字符串超长自动换行
    1.英文字符串超长换行使用系统方法wordwrap2.中文字符串超长换行自行定义方法mb_wordwrap/***Notes:对传入的中文字符串处理,如果字符串超过限定的长度,则自动进行换行*docs:*/functionmb_wordwrap($str,$width=8,$break="\r\n"){......
  • VK1623LCD液晶屏显示驱动芯片,适用各种LCD面板显示
    产品品牌:永嘉微电/VINKA产品型号:VK1623S封装形式:LQFP100/QFP100/DICE/COG产品年份:新年份  产品简介:VK1623S是一个点阵式存储映射的LCD驱动器,可支持最大384点(48EGx8COM)的LCD屏。单片机可通过3/4线串行接口配置显示参数和发送显示数据,也可通过指令进入省电模式。Z20+167 ......
  • P2679 [NOIP2015 提高组] 子串 题解
    原题\(题目大意\)\(从字符串a中选出k个子串s_1,s_2,s_3...s_k使得s_1+s_2+s_3+...+s_k=b\)\(求总方案数对10^9+7取模的结果\)\(1\le|a|即n\le1000,1\le|b|即m\le200,1\lek\le|b|\)\(设f_{i,j,x}表示已经选到a的第i个字符,b的第j个字符,共选了x个子串的方案数\)\(则可得......