携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情
题目
给定一个字符串
s,请你找出其中不含有重复字符的 最长子串 的长度。
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
题解
我们首先创建一个
SET的set数据结构实例,然后在声明三个变量,j变量指向字符串的开头,i变量是用于for循环中遍历字符串使用,当i变量小于字符串的length时则会自增,j变量不会跟着i变量自增,它只会在我们需要它改变的时候才会改变,maxLength变量是用于存储最大不重复字符的长度,在进行判断当前字符串长度是否为零,为零则直接返回零,然后声明一个for循环,进行循环该字符串,判断SET变量中有没有当前字符串的每一个数字,如果没有那么说明到现在,还没有重复的字符串, 就把当前字符添加到SET变量中,然后进行更新最大不重复字符的数量,如果SET变量中存在该字符串,则从SET变量中进行删除当前数据,并且递增j变量,递增过后在进行检查当前SET变量中是否存在该字符串,如此反复进行操作知道SET变量中没有当前字符串,重复此步骤,知道遍历完整个字符串即可得出最长不重复字符的字符串长度
var lengthOfLongestSubstring = function(s) {
const SET =new Set();
let i=0,j=0,maxLength=0;
//判断以下形参的长度,如果字符串长度为零则直接返回0
if(s.length===0){
return 0
}
for(i;i<s.length;i++){
// 如果当前SET中没有重复的,我们就把当前数据添加进去SET中,同时也把当前的maxLength和SET的长度进行对比取出最大值更新给maxLength
if(!SET.has(s[i])){
SET.add(s[i])
maxLength=Math.max(maxLength,SET.size)
}else{
// 有重复的情况
while(SET.has(s[i])){
SET.delete(s[i])
j++;
}
SET.add(s[i])
}
}
return maxLength;
};
坚持努力,无惧未来!