leetcode 3. 无重复字符的最长子串

题目描述

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

 输入: "abcabcbb"

 输出: 3

 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

思路补充:

 使用set而不是数组,因set是用哈希表实现的,查找效率更高,为O(1)

 要检查一个字符串是否有重复字符,遍历字符串中的所有字符,并将它们逐个放入 set 中。在放置一个字符之前, 检查该集合是否已经包含。使用临时变量存储最大长度。

 也可以使用队列,若新添加的元素已经存在队列中,将队列中该元素及其之前的所有元素移除,即方法2的滑动窗口。

解决方法

1.  简单解法

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        n = len(s)
     lens = start = end = 0
        while end < n:
            if s[end] not in s[start:end]:
                end += 1
                lens = max(lens, end-l)
            else:
                start += 1
        return lens  

2.  滑动窗口

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        n = len(s)
     if n==0 : return 0
        t = set()
        left = 0
        pre = 0
        cur = 0
        for i in range(n):
            cur += 1
            while s[i] in t:
                t.remove(s[left])
                left += 1
                cur -= 1
            if cur > pre : pre = cur
            t.add(s[i])
        return pre
posted @ 2020-05-05 23:50  如鹿~  阅读(91)  评论(0编辑  收藏  举报