leetcode 3. 无重复字符的最长子串
Posted 如鹿~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于leetcode 3. 无重复字符的最长子串的主要内容,如果未能解决你的问题,请参考以下文章