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

日做力扣题1--3. 无重复字符的最长子串

题目:

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

示例 1:

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

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"所以其长度为 1。

示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke"所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

提示:

  • 0 <= s.length <= 5 * 104
  • s 由英文字母、数字、符号和空格组成

解析:

1.滑动窗口

  • 使用两个指针 i 和 le 表示窗口的左右边界。

  • i 是窗口的左边界,le 是窗口的右边界。

  • 窗口内的字符始终是不重复的。

2.哈希集合

  • 使用 unordered_set<char> 来记录当前窗口中的字符,方便快速判断字符是否重复。

3.窗口滑动

  • 每次移动左边界 i 时,从集合中移除左边界前一个字符 s[i-1]

  • 然后移动右边界 le,直到遇到重复字符或到达字符串末尾。

  • 更新当前窗口的长度 le - i + 1,并与 ret 比较,记录最大值。

代码:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        // 使用哈希集合记录当前窗口中的字符
        unordered_set<char> _set;
        int n = s.size();
        int ret = 0;  // 记录最长子串的长度
        int le = -1;  // 滑动窗口的右边界

        // 遍历字符串,滑动窗口的左边界是 i
        for (int i = 0; i < n; i++) {
            // 每次移动左边界时,移除左边界前一个字符
            if (i != 0) {
                _set.erase(s[i - 1]);
            }

            // 移动右边界,直到遇到重复字符
            while (le + 1 < n && !_set.count(s[le + 1])) {
                _set.insert(s[le + 1]);
                le++;
            }

            // 更新最长子串的长度
            ret = max(ret, le - i + 1);
        }

        return ret;
    }
};

时间复杂度

  • 时间复杂度O(n),其中 n 是字符串的长度。每个字符最多被访问两次(左边界和右边界各一次)。

  • 空间复杂度O(min(m, n)),其中 m 是字符集的大小(ASCII 字符集为 128)。哈希集合最多存储 min(m, n) 个字符。 

相关文章:

  • fastapi+vue实现按钮级别的权限控制
  • Golang学习笔记_33——桥接模式
  • oracle between and包含边界
  • 罗德与施瓦茨ZNB20,矢量网络分析仪9KHz-20GHz
  • Redis集群主从切换源码解读
  • MySQL 学习笔记:从基础到进阶
  • 格瑞普推出革命性半固态电池,为行业无人机续航注入未来动力
  • ib网络状态探测
  • 低代码系统-产品架构案例介绍、某PaaS(十四)
  • 如何简单的去使用jconsloe 查看线程 (多线程编程篇1)
  • 深度学习和机器学习的本质区别(白话版)
  • 基于FPGA的制冷型红外成像电路设计(论文+图纸)
  • 基于SpringBoot+vue+uniapp的投票小程序+LW示例参考
  • docker删除镜像详细教程
  • DeepSeek的本地化部署
  • 【达梦数据库】dblink连接[SqlServer/Mysql]报错处理
  • 百度搜索融合 DeepSeek 满血版,开启智能搜索新篇
  • SVM对偶问题
  • Redis 监视器:深入解析与实战指南
  • HomeAssistant 发现MQTT设备(温度,湿度,开关)
  • 安徽省委副秘书长、省委政研室主任余三元调任省社科院院长
  • 国家林草局原党组成员、副局长李春良接受审查调查
  • 王毅人民日报撰文:共商发展振兴,共建中拉命运共同体
  • 中共中央、国务院印发《生态环境保护督察工作条例》
  • 人民日报整版聚焦:专家学者看2025中国经济增长点
  • 人民空军:网上出现的“运-20向外方运送物资”为不实消息