美文网首页
03. 无重复最长子串

03. 无重复最长子串

作者: 卡尔书院 | 来源:发表于2020-07-11 22:40 被阅读0次

题目

步骤

正确代码

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    const set = new Set();
    let i = 0, j = 0, maxLenth = 0;
    for(; i < s.length; i++){
        if(!set.has(s[i])){
            set.add(s[i]);
            maxLenth = Math.max(maxLenth, set.size);
        }else{
            while(set.has(s[i])){
                set.delete(s[j]);
                j++;
            }
            set.add(s[i]);
        }
    }
    return maxLenth;
};
  • 我们认为题目中一般不会给出一个空字符串 , 所以省略了以下代码 :
 if(s.length === 0){
        return 0;
    }

错误代码

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    let i, j, maxLenth = 0;
    const set = new Set();

    if(s.length === 0){
        return 0;
    }
    for(i = 0; i < s.length; i++){
        if(!set.has(s[i])){
            set.add(s[i]);
            maxLenth = Math.max(maxLenth, set.size);
        }else{
            set.delete(s[j]);
            set.add(s[i]);
        }
        j++;
    }
    return maxLenth;
};
  • 应循环删除至set中不含有i指针指向的字符为止 , 而不是只删掉一个 ;
    如 : i = 3 时 , 需要删除p和w两个字符 . 否则会出现wwke子串 .

相关文章

网友评论

      本文标题:03. 无重复最长子串

      本文链接:https://www.haomeiwen.com/subject/illwcktx.html