题目描述
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
解题思路
滑动窗口法
用一个window来记录不重复的子串,并且max_len来记录最长子串,以“pwwkew”为例,初始化window为空列表[ ], 遍历每一个字符,首先是p,判断是否在window中,如果不在就添加进去,当遍历完第二个字符时,window中为[p,w],当遍历到第三个w时,发现在window中已经存在了,就在window中定位w的下标i,并将window变为window[i + 1: ],继续往后遍历
class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ window = list() max_len = 0 cur_len = 0 for i in range(len(s)): val = s[i] if val not in window: window.append(val) cur_len += 1 else: index = window.index(val) window = window[index+1:] window.append(val) cur_len = len(window) if cur_len > max_len: max_len = cur_len return max_len S = Solution() S.lengthOfLongestSubstring('pwwkew')