当前位置: 首页 > news >正文

LeetCode 热门100题-无重复字符的最长子串

题目描述:

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

示例 1:

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

实现逻辑:

类似于伸手去一个不透光的箱子里掏带有颜色的小球,挨个将掏出的小球装进一个瓶子里,每往瓶子里装一个小球就更新一次临时最大值currentMax,当某次掏出的小球颜色在瓶子里已有,则拿一个新瓶子来装该小球,同时在Max和currentMax中选一个最大值更新Max,当箱子里已经没有小球时则表明遍历结束。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        unordered_set<char> charSet;  // 用于存储当前窗口中的字符
        int left = 0;  // 滑动窗口的左边界
        int maxLength = 0;  // 记录最长子串的长度
        
        // 遍历字符串
        for (int right = 0; right < s.size(); ++right) {
            // 如果当前字符已在窗口中,移动左边界缩小窗口
            while (charSet.find(s[right]) != charSet.end()) {
                charSet.erase(s[left]);
                left++;
            }
            // 将当前字符加入窗口
            charSet.insert(s[right]);
            // 更新最大子串长度
            maxLength = max(maxLength, right - left + 1);
        }
        return maxLength;
    }
};

 代码逻辑:

代码中,用瓶子的过程可以用集合unordered_set<char> charSet;来代替,集合中每个元素只会出现一次。

如何去判断新掏出的小球颜色(新的字母元素)是否已经在瓶子(集合)中出现,用迭代器find即可,拿一个新瓶子的过程可以用

            while (charSet.find(s[right]) != charSet.end()) {
                charSet.erase(s[left]);
                left++;
            }

实现,假设瓶子中已经有红蓝绿三个颜色,新的小球颜色为蓝色,通过while循环,让left指向绿色小球,因为从此刻开始,不重复的连续序列应该时蓝绿,而瓶子中此时只有绿色,所以在while循环后,还需要将新颜色的小球加入瓶子中。

而后不断地更新max:     maxLength = max(maxLength, right - left + 1);

相关文章:

  • 用大模型学大模型03-数学基础 概率论 随机变量 概率分布
  • 如何在OCP部署Java应用程序
  • 在计算机视觉任务中,Transformer架构与CNN各自的优势和劣势有哪些?
  • 【Leetcode 每日一题】1552. 两球之间的磁力
  • 工业光源中的偏光板
  • ArrayList、LinkedList、Vector
  • CSS 实现下拉菜单效果实例解析
  • 什么是偏光环形光源
  • 深入浅出CSS复合选择器:掌控元素关系与层级选择
  • 【linux】在 Linux 服务器上部署 DeepSeek-r1:70b 并通过 Windows 远程可视化使用
  • Java面试第一山!《集合》!
  • 差分的性质
  • STM32 是什么?同类产品有哪些
  • 用SiliconFlow的接口调用 deepseek-ai/Janus-Pro-7B 模型生成 图像
  • Java面试宝典:说下Spring Bean的生命周期?
  • 制造业物联网的十大用例
  • 【机器学习实战】kaggle背包价格预测(堆叠的实战用法)
  • 03【FreeRTO队列-如何获取任务信息与队列的动静态创建】
  • yarn add electron --dev --platform=win64 报错 certificate has expired 2025年 解决办法
  • 高并发场景下,如何用无锁实现高性能LRU缓存?
  • ubuntu做网站开发/白度
  • 哪个网站有高清图片做ppt/百度seo排名优化公司
  • 网站文章模板/千锋教育可靠吗
  • 做一个购物网站价格/什么是优化设计
  • 重庆网站建设搜外/黄页网站推广app咋做广告
  • 高端网站建设 aspx/成都做网络推广的公司有哪些