leetcode003无重复字符的最长子串

88 阅读1分钟

leetcode的题目链接

给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

这是一个比较典型的可以用滑动窗口来做的题

维护一个最长子串str,遍历s,依次将s[i]加入到str子串中,如果s[i]已经在str中存在,这一步可以用string的indexOf方法,一来是可以判断是否存在,二来获取到的index下标可以用于将重复字符出现的位置截断,重新得到新的不重复子串。全局维护一个最长值len,出现重复值时记录下此时最长的子串长度

var lengthOfLongestSubstring = function(s) {
    if(s.length===1) return 1
    let len=0
    let str=s[0]
    for(let i=1;i<s.length;i++) {
        let index=str.indexOf(s[i])
        str+=s[i]
        if(index!==-1) {
            str=str.slice(index+1)
        }
        len=len>str.length?len:str.length
    }
    return len
};