LeetCode-03-无重复字符的最长字串

努力学算法的第三天,冲冲冲。
经过前两天的熟悉今天第三题:
1,考虑了两分钟
2,百度了一下“python字符串转数组”
3,五分钟写出了第一次代码,有点高兴的太早,在“ ”这个地方出错了
4,修改了三分钟,主要是调整循环的范围,
5,第二次提交,通过。虽然没有超越多少人,但是值得小小的表扬一下。

思路

从头开始遍历每一个字符放入到hashmap中,然后依次扫描后续每一个字符继续放入到hashmap中,直到某一字符已经存在为止。得到以该字符开头对应的最大无重复字串。循环得到无重复字符的最长字串
在这里插入图片描述
在这里插入图片描述

我的解,欢迎指正优化

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        maxlen=0
        for i in range(1,len(s)+1):
            hashmap={}
            j=i-1
            while (j<len(s)) and (s[j] not in hashmap): 
                hashmap[s[j]]=j
                j+=1
            maxlen=len(hashmap) if len(hashmap) > maxlen else maxlen
        return maxlen

滑动窗口

当然我肯定不会就此满足,于是我在一个精选中看到了四个字滑动窗口
不错,我的思想就是这个,但是代码实现上稍微有点区别。
并且这位大佬总结了所有的LeetCode中滑动窗口的题,佩服佩服。
点我去看,快点,快点!

画解剑指offer

双膝奉上,图画的也太骚气了。这个不但要看图,评论里也一堆大神进行优化。
牛!! !! !! !! !! !!! !! !! !! !!! !! !! !!! !! !!! !!! !!

仿写画解的python代码

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        ans = 0
        table = {}
        start = 0
        for end, v in enumerate(s):
            if v in table.keys():
                start = max(table.get(v) + 1, start)
            ans = max(ans, end - start + 1)
            table[v] = end
        return ans

启发:善用枚举类型.

这个是左右同时的窗口滑动,深入理解后感觉真的是太妙了。每当后面有重复字符出现时,就将头指针移动到上一次该字符出现位置的下一个位置,很强,很强。

又学到了

仅供个人学习使用,侵删

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值