思路:主要思路采用双指针的方式,右指针负责从左到右的一个遍历,左指针要进行判断什么时候进行移动和计算。当右指针指向的元素在左指针的右指针的区间找到值,这个时候重新计算左指针的值。
采用indexOf(ch,start)从start这个位置开始查找ch字符第一次出现的位置。需要注意的小点是如果存在的话返回的是在这个字符串中索引位置,不是从start之后的索引位置。
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
let res = 0
let left = 0 ,len = s.length
for(let right = 0 ;right<len;right++){
let index = s.indexOf(s[right],left)
console.log(index,'index')
if(index==-1||index>=right){
res = Math.max(res,right-left+1)
}else{
left = index+1
}
}
return res
};
仅采用indexOf(ch)方式获取索引处理
var lengthOfLongestSubstring = function(s) {
let result=[];
let max = 0;
//遍历 result.indexOf(val)判断数组是否含有某值,有的话,就返回下标(下标从0开始),否则就返回-1
//str.splice(pos,delCnt); 从pos位置开始 删除delCnt个元素,
for(let i=0;i<s.length;i++){
//在js中字符串可以当作数组处理,访问单个元素的方法:1.通过下标访问 2.charAt() 推荐charAt()
let index = result.indexOf(s[i]);
if(index!==-1){ //不等于-1 表示找到了元素,然后进行删除
result.splice(0,index+1);
}
result.push(s.charAt(i));
max = Math.max(result.length,max);
}
return max;
};