leetCode-热题100-滑动窗口合集(JavaScript)

滑动窗口

[1- 无重复字符的最长子串](#1- 无重复字符的最长子串)

[2- 找到字符串中所有字母异位词](#2- 找到字符串中所有字母异位词)

1- 无重复字符的最长子串

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

复制代码
var lengthOfLongestSubstring = function(s) {
    // 无重复字符的连续的最长子串
    // 滑动窗口:双指针+哈希表
    let window = new Map()// 记录窗口内字符的最新索引(避免重复)
    let left = 0
    let maxLen = 0
    for(let right = 0; right < s.length; right++){
        const char = s[right]
        // 如果当前字符已在窗口内(且索引≥left)
        if(window.has(char) && window.get(char) >= left){
            // 收缩左指针到「重复字符的下一位」
            left = window.get(char) + 1
        }
        // 更新当前字符的最新索引
        window.set(char,right)
        // 更新最大长度(当前窗口长度 = right - left + 1)
        maxLen = Math.max(maxLen,right-left+1)
    }
    return maxLen
};

2- 找到字符串中所有字母异位词

给定两个字符串 sp,找到 s中所有 p异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

复制代码
var findAnagrams = function(s, p) {
    // 和最小覆盖子串很像,但这个子串长度是固定的
    // 滑动窗口,双指针
    let ans = []
    let slen = s.length
    let plen = p.length
    let cnt = Array(128).fill(0)
    let less = 0
    // 如果s字符串比p字符串还短,直接返回ans
    if(slen < plen) return ans

    // 初始化p字符串对字符的需求
    // less表示p字符串的字符个数
    for(let char of p){
        const code = char.charCodeAt(0)
        if(cnt[code] === 0){
            less++
        }
        cnt[code]++
    }

    let left = 0
    for(let right = 0;right < slen; right++){
        // 
        const rCode = s.charCodeAt(right)
        cnt[rCode]--
        if(cnt[rCode] === 0){
            less--
        }
        // 固定滑动窗口大小为p字符串的长度
        // 窗口区间[left,right]
        if(right - left + 1 > plen){
            const lCode = s.charCodeAt(left)
            // 当前移除的字符是p字符串中需求的字符,需要将less-1
            if(cnt[lCode] === 0){
                less++
            }
            // 该字符需求+1
            cnt[lCode]++
            // 窗口右移
            left++
        }
        // 该窗口正好是p的异位词子串
        if(less === 0){
            ans.push(left)
        }
    }
    return ans
};
相关推荐
江畔柳前堤38 分钟前
前台·中台·后台:2026年AI原生时代的架构全景图
开发语言·人工智能·算法·机器学习·架构·scala·ai-native
文心快码BaiduComate1 小时前
2026 OPC x AI Coding 趋势案例交流会圆满落幕:一个人就一支研发团队
算法
ACM-moran1 小时前
条件显化(二分单峰函数+构造数列)
算法·推公式·整数三分
闻缺陷则喜何志丹2 小时前
【栈 运算系统】P3719 [AHOI2017初中组] rexp|普及+
c++·算法··洛谷·运算系统
疯狂打码的少年2 小时前
【数据库技术】多值依赖与第四范式(4NF)
数据库·笔记·算法
子文雨2 小时前
基于 uC3845 与 ATtiny13 双芯片架构的 8.4V/2.5Ah 锂电池智能充电器设计
单片机·嵌入式硬件·算法
青山木2 小时前
Hot 100 --- 数组中的第K个最大元素
java·数据结构·算法·排序算法
玛卡巴卡ldf2 小时前
【AICoding】笔试提示词设计思路
java·算法·ai编程
宿6742 小时前
vue3-config
前端·javascript·vue.js
明月_清风2 小时前
位图与布隆过滤器:海量数据下的"存在性判断"艺术
前端·后端·算法