找出字符串中不含有重复字符的最长子串的长度-踩坑

「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战

大家好,我是 摸鱼小公举,真正的强者,不会怨天尤人,如果想不被别人看轻,你就只有付出比别人多十倍百倍的努力,才能站的比别人更高。上一篇文章是  改变this指向的多种方法 ;今天我们来学习一道力扣上算法题,此题型应该算简单,但是总会踩坑的,那么请找出字符串中不含有重复字符的最长子串的长度。

给定一个字符串

let arr="babad"
复制代码

在这给了很简单的一个字符串,先揭晓一眼就能看出来的答案:bad 最长字串的长度是3。

首先错误示例

var len = 0
var arr2 = []
for(let i=0;i<arr.length;i++){
  if(arr2.indexOf(arr[i]) === -1){
  arr2.push(arr[i])
  }else{
  arr2.shift(arr[i])
  continue
  }
len = Math.max(len, arr2.length)////取了循环中arr2长度最长的时候再赋值给len
}
console.log(len,"11111ress") // 2
复制代码

打印效果如下

1644460718.png

这里打印出的结果明显对不上

再来正确示例

 var len = 0;
 i = 0;
 var arr2 = [];
 while (i < arr.length) {
   if (arr2.indexOf(arr[i]) === -1) {
     arr2.push(arr[i]);
   } else {
     arr2.shift(arr[i]); //从数组中删掉第一个元素
     continue;
   }
   len = Math.max(len, arr2.length); //取了循环中arr2长度最长的时候再赋值len
   i++;
 }
 console.log(len); // 3
复制代码

打印效果如下

1644460995.png

好了这里打印的结果正确了

为什么都是循环却有不同效果,在这来总结以下知识点

break语句在for语句和while语句中的作用都是:永久终止其循环;
而continue语句在两个语句中存在区别:

(1)在for语句中,continue语句跳过循环体的剩余部分,直接回到调整部分;

(2)在while语句中,调整部分是循环体的一部分,所以continue将会跳过它。

结语:

好了文章到此就结束了,欢迎大家( 点赞+评论+关注 ) 有问题可以来互相交流一下。希望这篇文章对大家有帮助,也希望大家多多支持我,今天是我参与2022首次更文挑战的第11天,加油!

Guess you like

Origin juejin.im/post/7062986804042940452