寻找最长无重复字符 (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 @   Esther_Cheung  阅读(239)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示