- 给定一个字符串,请你找出其中不含有重复字符的最长子串 的长度。
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3.请注意,你的答案必须是子串的长度,“pwke” 是一个子序列,不是子串。
本题目利用滑动窗口的知识进行解决
具体实现代码如下
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
# 定义窗口为一个列表
son = list()
# 定义窗口大小
cur_len = 0
# 记录最长子串长度
max_len = 0
# 判断是否为空字符串
if not s :
return 0
n = len(s)
# 开始遍历字符串
for i in range(0,n):
sub = s[i]
# 是否存在于子串
if sub in son:
# 找到子串中重复的字母并记录位置
index = son.index(sub)
# 将整个窗口变换为去除该son.位置之前的字母的窗口
son = son[index+1:]
# 插入后面的重复的字母
son.append(sub)
cur_len = len(son)
else:
son.append(sub)
cur_len = cur_len + 1
max_len = cur_len if max_len < cur_len else max_len
文章部分来源于LeetCode,如果有侵权则删除