Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

  • 计算机网络

  • 设计模式

  • Java

  • Spring

  • SpringCloud

  • MySQL

  • Redis

  • 分布式

  • Zookeeper

  • Dubbo

  • Kafka

  • 数据结构

  • 算法

  • OJ

    • 自定义
    • 排序
    • 位运算
    • 二分查找
    • 递归
    • 双指针(逆向,快慢)
    • 滑动窗口
      • 辅助栈
      • 贪心
      • 回溯
      • 动态规划
      • 二叉树
      • DFS
      • 拼接&拆分
    • 从道家哲学看计算机?
    • 后端
    • OJ
    plantre
    2025-06-11
    目录

    滑动窗口

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

    class Solution {
        public int lengthOfLongestSubstring(String s) {
            Map<Character, Integer> window = new HashMap<>();
            int left = 0, right = 0;
            int res = 0;
            while (right < s.length()) {
                char c = s.charAt(right);
                right++;
                // 进行窗口内数据的一系列更新
                window.put(c, window.getOrDefault(c,0) + 1);
                // 判断左侧窗口是否要收缩
                while (window.get(c) > 1) {
                    char d = s.charAt(left);
                    left++;
                    // 进行窗口内数据的一系列更新
                    window.put(d, window.getOrDefault(d,0) - 1);
                }
                // 在这里更新答案
                res = Math.max(res, right -left);
            }
            return res;
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23

    # **拼多多:**最多允许一对相邻重复字符的最长子串问题

    public class Solution {
        public int longestSubstring(String s) {
            if (s == null || s.length() == 0) return 0;
            int left = 0, maxLen = 1, repeatCount = 0;
            
            for (int right = 1; right < s.length(); right++) {
                // 检查当前字符与前一个是否重复
                if (s.charAt(right) == s.charAt(right - 1)) {
                    repeatCount++;
                }
                
                // 若相邻重复次数超过1,移动左指针直到合法
                while (repeatCount > 1) {
                    if (s.charAt(left) == s.charAt(left + 1)) {
                        repeatCount--;
                    }
                    left++;
                }
                
                // 更新最大长度
                maxLen = Math.max(maxLen, right - left + 1);
            }
            return maxLen;
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    编辑 (opens new window)
    上次更新: 2025/06/13, 00:51:28
    双指针(逆向,快慢)
    辅助栈

    ← 双指针(逆向,快慢) 辅助栈→

    最近更新
    01
    集成loki
    07-04
    02
    TCP的ESTABLISHED是什么意思
    06-24
    03
    安装1panel
    06-24
    更多文章>
    Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式