Leetcode字符串篇—javascript实现无重复字符的最长子串

无重复字符的最长子串

题目链接

  3、实现无重复字符的最长子串  难度:中等

题目描述

在这里插入图片描述

实现思想

  该问题就是寻找一个最大长度的无重复的子串,可以利用滑动窗口的思想,这里是最大滑窗的应用。首先我们先新建一个空字符串str并遍历原字符串,将原字符串中的字母在str中查找,若没有找到则将该字母加入str中。随着不断遍历原字符串的字母,最终会与str中的字母重合。此时说明在重合的这个字母之前,str中的字符串就是我们要找到的子串,于是我们返回子串的长度并更新result。然后通过while循环逐渐删除str中的子串并进行新的符合条件的子串的查找并更新result。

实现代码

var lengthOfLongestSubstring = function(s){
    const lens = s.length;
    let result = 0;  //最终返回子串长度
    let str = '';
    for (let i = 0; i < lens; i++){
    	//如果窗口里没有当前遍历到的字母,则将其加入str中
        if(str.indexOf(s[i]) == -1){
            str += s[i];
        }else{  //如果字母已经存在,加入该字母并去除str最前面的一个字母
        	result = result < str.length ? str.length : result;  //返回找到的子串长度并更新result
            str += s[i];
            //若当前遍历的字母在str中找到的是最后一个位置时才结束while循环
            //这个while循环的作用是表示已经完成了一个字串的寻找,所以清空str开始新的符合条件的子串寻找
            while (str.indexOf(s[i]) != str.length - 1){
                str = str.slice(1);  //选取从下标1开始的所有字母,也就是去除str中的第一个字母
            }
        }
        result = result < str.length ? str.length : result;
    }
    return result;
};

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值