「这是我参与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
打印效果如下
这里打印出的结果明显对不上
再来正确示例
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
打印效果如下
好了这里打印的结果正确了
为什么都是循环却有不同效果,在这来总结以下知识点
break语句在for语句和while语句中的作用都是:永久终止其循环;
而continue语句在两个语句中存在区别:
(1)在for语句中,continue语句跳过循环体的剩余部分,直接回到调整部分;
(2)在while语句中,调整部分是循环体的一部分,所以continue将会跳过它。
结语:
好了文章到此就结束了,欢迎大家( 点赞+评论+关注 ) 有问题可以来互相交流一下。希望这篇文章对大家有帮助,也希望大家多多支持我,今天是我参与2022首次更文挑战的第11天,加油!