码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-05-06 01:07:33      阅读:46      评论:0      收藏:0      [点我收藏+]

标签:ring   最长子串   range   lse   思路   ==   class   哈希表   return   

题目描述

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

 输入: "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

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

标签:ring   最长子串   range   lse   思路   ==   class   哈希表   return   

原文地址:https://www.cnblogs.com/carrielu/p/12833564.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!