无重复字符的最长子串
题目描述:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
- 方法一:使用暴力算法
可以使用两个for循环,截取字符串的子字符串,然后在对子字符串进行一次判断是否有重复字符串。
- 方法二:使用滑动窗口
从第一个方法中我们可以进一步的思考,如果我们可以利用数据结构,对当前的遍历的字符串记录是否存在重复的字符串,如果存在动态的改变窗口就可以使用一次遍历完成任务。
具体的实现如下:
首先记录遍历的字符串所有的字符(可以使用一个集合sets保存)
此时sets=(a,b,d),继续向下遍历
此时,集合中出现重复选择,我们通过移动i指针,调整窗口大小来筛选最大不重复子字符串。调整原则就是找到与当前字符重复的字符串位置。
重复上述的步骤就可以找到最大的子字符串。
代码:
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
# 使用字典序列
# 使用队列
que = []
setal = set()
maxnum = 0
for i in s:
if i not in setal:
setal.add(i)
que.append(i)
else:
z = que.pop(0)
setal.remove(z)
while len(que) != 0 and z != i:
z = que.pop(0)
setal.remove(z)
que.append(i)
setal.add(i)
if len(que) > maxnum:
maxnum = len(que)
print(maxnum)
return maxnum