接上文,最近忙着期末复习,没有怎么写代码,今晚上刚好有点空,抽出点时间来写代码。
上一个博客,我的算法实在是太垃圾了,没眼看,本着学习和精益求精的精神,我去看了官方的题解。
这就是简单的算法流程,其实也就是不断遍历暴力解法,但是对于我自己写的算法确实有很多改进。按照它的思路,我去写了代码。如下:
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
occ = set()
n = len(s)
result = 0
right,left= 0, 0
while left<len(s):
while right< len(s):
if s[right] in occ:
break
else:
occ.add(s[right])
right += 1
result = max(result,right-left)
occ.remove(s[left])
left += 1
return result
不得不说,大佬的解法就是不一样,他们的思路,我得学两年。
总结就是,这种滑动窗口类型的题目,最好使用双指针配合着哈希表,这样的话,能最大限度的减少时间复杂度和空间复杂度。