寻找最长无重复字符 (leetcode题 )

//javascript 实现
//创建指针,判断指针位置是否和下一个位置相同,如果相同,重新从下一个位置累加,如果不同,将该字符与已经累加的字符比较。
 // 如果存在重复的情况,比较第一个字符到第一个重复字符出现的位置的长度 和 最后一个重复字符到第一个重复字符之间的长度,取较大的一个作为暂时的结果,如果相等取后者。但后者继续累加。
 //如果不存在重复的情况,继续累加。
 
 


function lengthOfLongestSubstring (s) {
//给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
    let newS =s;
    let res = 0;
    let right = 0;
    let left = 0;
    let m = new Map() 
    while(right < s.length && left< s.length){
        //如果出现重复字符,且重复字符的位置在left之前而不是之后
        if(m.has(s[right]) && m.get(s[right]) >= left){
            //比较最大长度(考虑从开始到第一次出现重复字符的情况及重复的字符之间的长度)
            res = Math.max(res,right-left);
        //获取重复的字符上次的位置,更新left。如果比现在left更小的话,不符合条件
            left = m.get(s[right])+1;
            //更新Map到本次的位置
            m.set(s[right],right)
        }else{
        //如果不是重复字符
        //记录当前index
            m.set(s[right],right)
        }
     //指针继续
        right++;
     //考虑从最后一个重复字符到尾部的长度
        res = Math.max(res,right-left);
    }
    return res;

};
posted @ 2020-02-20 18:33  Esther_Cheung  阅读(245)  评论(0)    收藏  举报