前端算法:无重复字符的最长子串

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

示例 1:

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

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

对字符串进行遍历,将字符和字符下标加入字典,left指向字符串最开始的位置,通过字典的has方法判断字符是否重复出现,若有则改变left的位置,之后再判断改变之后的子串长度是否并原来长,

var lengthOfLongestSubstring = function(s) {
    let map=new Map();
    let left=0;
    let num=0;
    //对字符串进行遍历
    for(let i=0;i=left){
            //将left指向该字符上一次出现的下一个位置
            left=map.get(s[i])+1
        }
        //在left改变之后,判断此时字符串是否比原来的长
        num=Math.max(num,i+1-left);
        //将该字符和对应的下标加入字典,如遇到相同的字符,则更新字符的下标
        map.set(s[i],i)
        
    }
    //返回无重复字符串的最长长度
    return num;
};

你可能感兴趣的:(算法,数据结构,算法,leetcode)