力扣刷题- 无重复字符的最长子串

97 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情

题目

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

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

题解

我们首先创建一个SET的set数据结构实例,然后在声明三个变量,j变量指向字符串的开头,i变量是用于for循环中遍历字符串使用,当i变量小于字符串的length时则会自增,j变量不会跟着i变量自增,它只会在我们需要它改变的时候才会改变,maxLength变量是用于存储最大不重复字符的长度,在进行判断当前字符串长度是否为零,为零则直接返回零,然后声明一个for循环,进行循环该字符串,判断SET变量中有没有当前字符串的每一个数字,如果没有那么说明到现在,还没有重复的字符串, 就把当前字符添加到SET变量中,然后进行更新最大不重复字符的数量,如果SET变量中存在该字符串,则从SET变量中进行删除当前数据,并且递增j变量,递增过后在进行检查当前SET变量中是否存在该字符串,如此反复进行操作知道SET变量中没有当前字符串,重复此步骤,知道遍历完整个字符串即可得出最长不重复字符的字符串长度

var lengthOfLongestSubstring = function(s) {
 const SET =new Set();
 let i=0,j=0,maxLength=0;
 //判断以下形参的长度,如果字符串长度为零则直接返回0
 if(s.length===0){
     return 0
 }
 for(i;i<s.length;i++){
    //  如果当前SET中没有重复的,我们就把当前数据添加进去SET中,同时也把当前的maxLength和SET的长度进行对比取出最大值更新给maxLength
    if(!SET.has(s[i])){
        SET.add(s[i])
        maxLength=Math.max(maxLength,SET.size)
    }else{
        // 有重复的情况
        while(SET.has(s[i])){
            SET.delete(s[i])
            j++;
        }
        SET.add(s[i])
    }
 }
 return maxLength;
};

坚持努力,无惧未来!