力扣—3无重复字符最长子串

    技术2023-12-06  103

    题目描述

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

    示例 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')
    Processed: 0.011, SQL: 9