题目:无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
题解思路
滑动窗口思想。维护一个可变长度的双向队列,遍历字符串,若队列中未出现该字符,则字符进入队列;若字符出现了,则把左边出现过的字符以及左边的全部元素移除。在过程中维护一个最大窗口长度,目的就是找到在一系列的局部窗口最大窗口长度中找到全局最大窗口长度,即我们所求的结果。
def lengthOfLongestSubstring(self, s: str) -> int: # 思路一。滑动窗口思想。维护一个可变长度的双向队列,遍历字符串,若队列中未出现该字符,则字符进入队列;若字符出现了,则把左边出现过的字符以及左边的全部元素移除。在过程中维护一个最大窗口长度,目的就是找到在一系列的局部窗口最大窗口长度中找到全局最大窗口长度,即我们所求的结果。 if s == "": return 0 if s == " ": return 1 queue = [] # 待维护的双向队列 max_len = 0 # 初始化结果值 i = 0 # 初始化指针索引 while i < len(s): if s[i] in queue: max_len = max(max_len,len(queue)) j = queue.index(s[i]) queue = queue[j + 1:] queue.append(s[i]) i += 1 max_len = max(max_len,len(queue)) return max_len
执行结果