SOURCE

const fn = (str) => {
    let i =0, j = 0
    let maxLength = 0
    const set = new Set() // 新建一个set对象
    // 如果数组长度为0,则直接返回0
    if(str.length === 0) {
        return maxLength
    }
    // 如果字符长度不为0,则执行该循环
    for(i; i< str.length; i++) {
        // set对象中不包含该字符,添加进入set对象,更新数组长度
        if(!set.has(str[i])){
            set.add(str[i])
            maxLength = Math.max(maxLength, set.size)
        } else {
            // 如果set对象包含该字符,则进入该循环
            while(set.has(str[i])){
               //set中有重复元素不断让j++ 并删除窗口之外的元素 直到滑动窗口内没有重复的元素
                set.delete(str[j])
                j++ // j小标加1
            }
            set.add(str[i])
        }
    }
    return maxLength
}

// s = "abcabcbb"
//  s = "bbbbb"
s = "pwwkew"
console.log(fn(s))
console 命令行工具 X clear

                    
>
console