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

无重复字符的最长子串

时间:2024-07-08 13:01:16浏览次数:15  
标签:子串 字符 right hash int ret 最长 left

题目描述

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

解法(滑动窗口)

使用"滑动窗口"解决问题:

  1. left =0,right = 0
  2. 进窗口
  3. 判断 是否出窗口
  4. 更新结果

起初left和right都为0,判断right的字符是否在哈希表中存在,不在的话将其置入,并且继续将right右移;如果该字符已经存在那么先记录一个结果 再将left右移。

 left需要右移至right当前字符相同的那个的后一个。

因为如果在right相同字符前依旧会有重复的字符。

此时,继续将right右移,重复以上步骤。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int left = 0, right = 0;
        // 用数组模拟hash,记录每个字符出现的次数
        int hash[128] = {0};
        int n = s.length();
        int ret = 0;

        while (right < n) {
            hash[s[right++]]++;          // 进入窗口
            while (hash[s[right-1]] > 1) { // 判断
                hash[s[left++]]--;       // 出窗口
            }
            ret = max(ret, right - left );
        }

        return ret;
    }
};

标签:子串,字符,right,hash,int,ret,最长,left
From: https://blog.csdn.net/2302_80190174/article/details/140261518

相关文章

  • C++ Boost 字符串处理库
    Boost库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量、可移植、高效的C应用程序。Boost库可以作为标准C库的后备,通常被称为准标准库,是C标准化进程的重要开发引擎之一。使用Boost库可以加速C应用程序的开发过程,提高代码质......
  • R语言数据格式转换:字符串(Strings)转为日期类型(Dates)
     R语言数据格式转换:字符串(Strings)转为日期类型(Dates)目录 R语言数据格式转换:字符串(Strings)转为日期类型(Dates)as.Date函数单个字符串到日期类型字符串向量到日期类型向量dataframe一列从字符串到日期类型dataframe多列从字符串到日期类型 as.Date函数通常,当您......
  • 【844. 比较含退格的字符串】
    题目:给定s和t两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回true。#代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。示例1:输入:s=“ab#c”,t=“ad#c”输出:true解释:s和t都会变成“ac”。示例2:输入:s=“ab##”,t=......
  • C++ 版本 对比字符图片
    #include<iostream>#include<opencv2/opencv.hpp>#include<map>#include<vector>#include<string>#include<set>#include<filesystem>namespacefs=std::filesystem;//计算图像中每个扇区的黑色像素数量voidcalculateBlackPi......
  • 生信算法9 - 正则表达式匹配氨基酸序列、核型和字符串
    建议在Jupyter实践。1.使用正则表达式匹配指定的氨基酸序列importre#氨基酸序列seq='VSVLTMFRYAGWLDRLYMLVGTQLAAIIHGVALPLMMLI'#正则表达式匹配match=re.search(r'[A|G]W',seq)#打印match及匹配到开始位置和结束位置print(match)#<re.Matchobject;......
  • leetcode678:有效的括号字符串
    给你一个只包含三种字符的字符串,支持的字符类型分别是 '('、')' 和 '*'。请你检验这个字符串是否为有效字符串,如果是 有效 字符串返回 true 。有效 字符串符合如下规则:任何左括号 '(' 必须有相应的右括号 ')'。任何右括号 ')' 必须有相应的左括号 '(' 。左括......
  • mini-lsm通关笔记-字符相关操作
    本文捋一下mini-lsm中的字符相关操作[u8]Vec<u8>BytesBufKeySliceKeyBytes[u8]和Vec<u8>这两个是rust内置的数据类型。[u8]:切片本身并不拥有数据,而是引用了数据。它由一个指向数组开始处的指针和一个表示数组长度的计数器组成。[u8]类型通常写作&[u8],这是因为切片通......
  • Redis基本命令源码解析-字符串命令
    1.set用于将kv设置到数据库中2.mset批量设置kvmset(msetnx)key1value1key2value2...mset:msetCommandmsetnx:msetnxCommandmsetCommand和msetnxCommand都调用msetGenericCommand2.1msetGenericCommand如果参数个数为偶数,则响应参数错误并返回如果nx=1,则......
  • L1-050 倒数第N个字符串
    给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为L,从L个a开始,以1为步长递增。例如当L为3时,序列为{aaa,aab,aac,...,aaz,aba,abb,...,abz,...,zzz}。这个序列的倒数第27个字符串就是zyz。对于任意给定的L,本题要......
  • 仅做笔记用:base64字符串转换为十六进制形式表示的二进制数据
    使用JavaScript实现一个函数,参数是一个base64的字符串,将这个字符串解析成二进制数据,并将这个二进制数据的每个字节以一个十六进制两位数表示出来,每个字节的十六进制两位数之间空一格,每行16个字节,返回整理好的十六进制形式。functionbase64ToHex(base64Str){//解析ba......