LeetCode 3. 无重复字符的最长子串

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目解析

我们需要找的是含重复元素的最长子串,当然直接暴力求解固然简单。但是可能引发的情况是超时,而且面试官想看到的也不是让你去暴力解决这类问题。因此我们使用哈希+滑动窗口的思想来解决。

滑动窗口+哈希

使用哈希表的缘故是更好的判断,该字符是否是重复的元素。

将当前元素进行进窗口,如果该元素是重复的元素。那么从该窗口的左边进行出窗口,直到该元素不是重复的元素为止,每次进窗口之后统计当前无重复子串的长度,求出最长的长度并且返回,代码如下(含有详细注释)。

代码

cpp 复制代码
class Solution 
{
public:
    int lengthOfLongestSubstring(string s) 
    {
        int n=s.size();
        // 注意字符的范围,定义哈希表
        int hash[128]={0};
        int ret=0;
        for(int left=0,right=0;right<n;right++)
        {
            // 进窗口
            hash[s[right]]++;
            // 若有重复元素,则进入循环
            while(hash[s[right]]>1)
            {
                // 最左边元素出窗口
                hash[s[left]]--;
                // 更新窗口
                left++;
            }
            // 走到这里right与left之间组成的字符串肯定没有重复元素
            // 计算长度
            ret=max(ret,right-left+1);
        }
        return ret;
    }
};
相关推荐
zhangfeng113310 分钟前
大语言模型 bpe算法 后面对接的是 one-hot吗 nn.Embedding
算法·语言模型·embedding
Pluchon13 分钟前
硅基计划4.0 算法 动态规划高阶
java·数据结构·算法·leetcode·深度优先·动态规划
科学计算技术爱好者20 分钟前
NVIDIA GPU 系列用途分类梳理
人工智能·算法·gpu算力
程序员敲代码吗20 分钟前
嵌入式C++开发注意事项
开发语言·c++·算法
好学且牛逼的马21 分钟前
【Hot100|14-LeetCode53. 最大子数组和】
数据结构·算法·leetcode
无心水24 分钟前
17、Go协程通关秘籍:主协程等待+多协程顺序执行实战解析
开发语言·前端·后端·算法·golang·go·2025博客之星评选投票
东华果汁哥1 小时前
【机器视觉 行人检测算法】FastAPI 部署 YOLO 11行人检测 API 服务教程
算法·yolo·fastapi
每天学一点儿1 小时前
[SimpleITK] 教程 63:配准初始化 (Registration Initialization) —— 从几何对齐到手动干预。
算法
君义_noip1 小时前
信息学奥赛一本通 1463:门票
c++·算法·哈希算法·信息学奥赛·csp-s
永远都不秃头的程序员(互关)1 小时前
【决策树深度探索(二)】决策树入门:像人类一样决策,理解算法核心原理!
算法·决策树·机器学习