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

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);


http://www.kler.cn/a/547154.html

相关文章:

  • Windows安装 WSL2、Ubuntu 、docker(详细步骤 , 弃用 docker desktop )
  • Jenkins 配置 Git Repository 五
  • Python爬虫实战:股票分时数据抓取与存储 (1)
  • 51-ArrayList
  • 【第2章:神经网络基础与实现——2.2反向传播算法详解与实现步骤】
  • PostgreSQL技术内幕25:时序数据库插件TimescaleDB
  • 借助 Docker 环境变量,实现1分钟上线在线客服系统
  • 【设计模式】【行为型模式】访问者模式(Visitor)
  • MATLAB中isfield函数用法
  • 使用Redis生成全局唯一ID/分布式唯一ID
  • 网络变压器的主要电性参数与测试方法(1)
  • 基于卷积神经网络的图像融合方法
  • 数据结构 day06
  • STM32 是什么?同类产品有哪些
  • 如何在 MySQL 5.6 中实现按季度分组并找到销量最高的书籍
  • 【Docker项目实战】使用Docker部署Sun-Panel导航面板
  • Linux驱动层学习:LED 驱动开发
  • Git 分布式版本控制
  • 网易易盾接入DeepSeek,数字内容安全“智”理能力全面升级
  • 人工智能泡沫效应