力扣3无重复字符的最长字串(滑动窗口)

3. 无重复字符的最长子串 - 力扣(LeetCode)

java 复制代码
class Solution {
    public int lengthOfLongestSubstring(String s) {
        Set<Character> occ = new HashSet<Character>();

        int n = s.length();

        int rk = -1;
        int ans = 0;

        for(int i = 0; i < n ; i ++){
            // i 往前挪了一格(左边界右移),就要把窗口左边被抛弃的字符删掉
            // i-1 就是上一轮窗口最左边的字符,现在它离开窗口了
            if (i != 0){occ.remove(s.charAt(i-1));}

            while(rk + 1 < n && !occ.contains(s.charAt(rk + 1))){
                occ.add(s.charAt(rk + 1));
                rk ++;
            }
            
            ans = Math.max(ans,rk + 1 - i);
        }

        return ans;
    }
}

注释部分疑问:为啥不直接在每一轮for循环直接new一个hashset

如果每一轮 for(i) 都 new HashSet(),逻辑能跑对,但是时间直接退化到 O (n²),很慢,遇到长字符串会超时;而原题代码复用同一个 set,做到 O (n)。

相关推荐
On The Road :34 分钟前
深入理解 JVM 垃圾回收:GC 是什么、如何判定垃圾、四大回收算法全解析
jvm·算法
微尘hjx2 小时前
【Deep-OC-SORT 03】多轨迹算法Deep-OC-SORT-卡尔曼滤波预测过程
算法·yolo·目标跟踪·ultralytics·车跟踪·轨迹算法·deep-oc-sort
老师我太想进步了20264 小时前
【数据结构-3】算法美学之降复杂度
数据结构·算法
机器人零零壹9 小时前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
ZhengEnCi12 小时前
大模型的分类到底怎么分:从基础模型到推理模型、从通用到专用的完整图谱
算法
取名真是12 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
罗西的思考13 小时前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习
nm_zfyjt15 小时前
信息流广告投放优化实践:线索成本评估模型与转化链路重构(家装建材案例)
算法·重构·内蒙古朋友圈广告服务商·内蒙古朋友圈获客
w_zero_one16 小时前
算法--构造
java·数据结构·算法