【题目的意思】
在字符串中截取一个子串,子串中没有相同的字符,在所有这样的子串中找出最长的子串,返回该子串长度
【我的方法】
用循环先找出没有没有相同的字符的子串,存储到result‘’中,得到长度sum,并清空存储到result‘’,找到下一个子串时,如果长度大于sum,则更新sum
【技巧】
由于要不断的判断下一个字符是否在子串中存在,可以使用Indexof()函数
转自indexOf()、lastIndexOf()、includes()之间的区别_海底人123的博客-CSDN博客
【code】
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
l = s.length
result = ''//存放子串
var sum = 0//子串长度
if(l == 0){
sum = 0
}
else if(s==" "||l == 1){//最后写完居然还说""返回0 ,但是" "返回1,没办法,只能再写个if
sum =1
}
else{
for(var i = 0 ; i < l ; i++){//第一层循环,指针i指向子串的第一个元素,并且第一个字母一定可以放到result中
result+=s[i]
for( var j = i+1 ;j < l ; j++){//第二层循环,j不断右移
var flag = result.indexOf(s[j])//先判断s[j]不是子串中已有的的元素
result = ( flag >=0)? result:result+=s[j]//如果s[j]不是子串中已有的的元素,则加入子串result,是的话result不变
if(result.length>sum){//result更新一次,都要判断长度变化
sum = result.length
}
if(flag >=0 || j == l-1){//s[j]是子串中已有的的元素,result清空,进行下一个i的循环,当然如果j已经指向s最后一个字母,也要结束循环
result = ''
break;
}
}
}
};
return sum
}
s ="c"
console.log(lengthOfLongestSubstring(s))
【结果】
【初学js,方法也不是很完美,希望多多指教啦~】