无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
最优解决方案
滑动窗口法。
就是用一个窗口(或者说一个区间)来表示当前不重复的子串,窗口的左边界是 start ,右边界是 i 。每次遇到一个新的字符,就把它放进窗口里,并记录它的位置。如果发现这个字符已经在窗口里出现过了,就说明这个子串不能再延长了,需要把窗口左边往右移动一点,直到把重复的字符排除在外。然后再计算一下这个窗口有多长,如果比之前记录的最长子串还要长,就更新一下最长子串的长度。这样一直遍历完整个字符串,就能找到最长子串的长度。
它可以在一次遍历中找到最长子串的长度,时间复杂度为 O(n) ,空间复杂度为 O(m) ,其中 n 是字符串 s 的长度, m 是字符集合的大小。