菜鸟日记-力扣第三题续

接上文,最近忙着期末复习,没有怎么写代码,今晚上刚好有点空,抽出点时间来写代码。

上一个博客,我的算法实在是太垃圾了,没眼看,本着学习和精益求精的精神,我去看了官方的题解。

这就是简单的算法流程,其实也就是不断遍历暴力解法,但是对于我自己写的算法确实有很多改进。按照它的思路,我去写了代码。如下:

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
       
        

不得不说,大佬的解法就是不一样,他们的思路,我得学两年。

总结就是,这种滑动窗口类型的题目,最好使用双指针配合着哈希表,这样的话,能最大限度的减少时间复杂度和空间复杂度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值