无重复字符的最长子串 leetCode js实现
题目描述
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。点这做题
示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
示例 4:
输入: s = “”
输出: 0
解题思路
第一层循环从第二个字符开始到s.length-1
第二层循环,从当前节点开始,向前遍历,遇到相同字符则记录第一个重复字符出现的位置,下一次遍历到此位置结束遍历,且结束此次循环。若不相同则长度加一,每循环一次记录的子串的最长长度
var lengthOfLongestSubstring = function(s) {
if(s.length == 0) return 0
if(s.length == 1) return 1
var flag = 0,maxlen = 1
for(var i=1;i<s.length;i++){
var len = 1
for(var j=i;j>flag;j--){
if(s[i] != s[j-1])
len++
else{
flag = j
break
}
}
maxlen = Math.max(len, maxlen)
}
return maxlen
};
这题一共做了五个小时,但是还是没有通过,很多情况都没有考虑到,一直在补漏按照错误例子修修改改,总结起来就是基础知识不够扎实,了解的算法也不够多。还得加油加油!