题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
解法:滑窗法
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
# 定义无重复子串最大长度,当前无重复子串的长度和当前无重复子串
max_len, cur_len, ans = 0,0,[]
for i in range(len(s)):
# 判断当前字符是否在原来的无重复子串中
# 不在就将当前字符加入无重复子串list,并更新当前子串的长度
if s[i] not in ans:
ans.append(s[i])
cur_len += 1
# 否则改变窗口,并增加当前字符到新窗口,重新计算窗口长度
else:
ind = ans.index(s[i])
ans = ans[ind+1:]
ans.append(s[i])
cur_len = len(ans)
# 对比并更新最长子串的长度
if cur_len > max_len:
max_len = cur_len
return max_len
参考:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/