题目描述 : 3. 无重复字符的最长子串
考察算法 : 滑动窗口、双指针
闲话短说 : 在刷Leetcode题目的时候会发现,每次提交过后若AC,万事大吉,但若遇到过不去的坎,会给出错的样例,然后就可以根据这个去修改自身的代码,以达到AC。(显然这是想问题不太全面的结果,之后做题还是要多想想,想一些特殊情况以及边界问题)
AC code:
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
length = len(s)
left,right = 0,0
res = -1
new_s = ''
# 判断子数组中是否有重复的字符,若没有,则结果就是原字符串的总长度
flag = False
while right < length:
new_s = new_s + s[right]
l = left
for i in range(l,right):
# 说明有重复的字符
if s[i] == s[right]:
# 得到重复字符之前的字符串
new_s = s[left:right]
# 得到长度
res = max(res,len(new_s))
# 更新左指针
left = i + 1
# right 位置的字符与前面的有所重复,但是上一步的left已经将重复的
# 删除掉了,所以在末尾处我们需要 + 1
r = right + 1
# 更新没有重复字符的字符串
new_s = s[left:r]
flag = True
break
right += 1
if flag == False:
res = length
else :
# 去除重复字符后,有可能之后的字符串的长度比之前所取得的值还要大,所以需要取一下max
# eg: aabcde
res = max(res,len(new_s))
# print(new_s)
return res
本文含有隐藏内容,请 开通VIP 后查看