滑动窗口去计算最长子串长度

滑动窗口去计算最长子串长度

万分感谢 lvshanke 大佬提供的思路!

代码参考自: 作者:lvshanke
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/zhi-xing-yong-shi-chao-guo-9954nei-cun-xiao-hao-ch/
来源:力扣(LeetCode)

以下是菜鸡消化之后自己写的小结

题目

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

关键

注意这个题目是要返回长度,不是要返回这个最长的字串,所以不用保存这个字串,直接定义一个全局变量来保存目前的最大不重复字串的长度,并不断更新。

思路

从左到右遍历字串,每次遍历,都检查当前遍历的元素是否在窗口内。
如果是,就截去窗口内这个重复字符前面的部分,加上新加进来的这个重复元素,判断此时的长度是否比max大。
如果大就取代max,否则将这个元素加入窗口,继续遍历,直到字串遍历结束。
虽然最后窗口大小可能不是最大的,但是我们已经将最大长度记录在max中了

用到的js函数

  • string slice(int start_index, int end_index)
    对象属性:字符串
    参数:

    • start_index:必填,截取字串的起始下标
    • end_index:选填,截取字串的结束下标(截取字串不包括它),如果没有默认是最后一个字符下标

    返回:截取的字串结果
    是否改变原字串:否

var s="0123456";
console.log(s.slice(2,4);
>>>> "23"

var s="0123456";
console.log(s.slice(2);
>>>> "23456"
  • int indexOf(string str, int from_index)
    对象属性:字符串
    参数:

    • str:必填,检索的字符串
    • from_index:选填,从哪个元素开始检索,默认是0

    返回值:检索到字符串str的最小下标,如果字符串不存在,返回 -1.

var str="0123456";
console.log(str.indexOf("12"));
>>>> 1
console.log(str.indexOf("12",3));
>>>> -1
var str="01234560123";
console.log(str.indexOf("12",3));
>>>> 8

代码

var max=0; // 记录最大长度
var st=""; //记录当前窗口内字符
for(var i=0;i<st.length();i++){
  if(st.indexOf(s[i])!==-1){// 遍历到的元素不在窗口中
    st+=s[i]; // 将新元素加入窗口
    if(max<st.length){// 更新max
      max=st.length;
    }
  } else {
    st+=s[i];// 也是把新的加到窗口
    st = st.slice(st.indexOf(s[i]));// 砍掉窗口中,重复元素前面的部分,更新窗口起点
  }
}
return max;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值