中等
技术面试0 次浏览给定一个字符串,找出其中不含有重复字符的最长子串的长度。
算法工程师
字符串滑动窗口
答题要点
可以使用滑动窗口的方法来解决这个问题。思路是使用两个指针left和right来表示滑动窗口的左右边界,使用一个哈希表来记录每个字符最后出现的位置。右指针不断向右移动,将字符加入窗口中,如果遇到重复字符,则将左指针移动到重复字符上一次出现位置的下一个位置。以下是Python代码实现: python def lengthOfLongestSubstring(s): n = len(s) if n == 0: return 0 left = 0 max_length = 0 char_index_map = {} for right in range(n): if s[right] in char_index_map and char_index_map[s[right]] >= left: left = char_index_map[s[right]] + 1 char_index_map[s[right]] = right max_length = max(max_length, right - left + 1) return max_length 在这段代码中,left和right分别表示滑动窗口的左右边界,char_index_map用于记录每个字符最后出现的位置。时间复杂度为$O(n)$,因为右指针最多遍历字符串一次。空间复杂度为$O(k)$,其中k是字符集的大小。