leetcode 3. 无重复字符的最长子串

135 阅读1分钟

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

示例 1:

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

示例 2:

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

来源:力扣(LeetCode) 链接:leetcode.cn/problems/lo… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:左指针和右指针,截取字符串str2 [左指针,右指针),当右指针指向的字符不包含在str2中时,右指针右移,不含重复字符的最长字串长度就是右指针-左指针;

当右指针指向字符不包含在str2中时,左指针右移,截取字符串str2[左指针,右指针),当右指针不包含在str2中时,做左指针继续右移。

不是最优解,只是记录。

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    if(s.length===0) return 0
    if(s.length===1) return 1
    let left = 0;
    let right = 1;
    let max = 0;
    while(right<s.length) {
        if(s.slice(left, right).indexOf(s.charAt(right)) === -1) {
            right++;
        } else {
            left++;
        }
        let len = (right - left);
        max = len > max ? len : max;
    }
    return max;
};