[leetcode]3最长子串 滑动窗口

#最长子串 滑动窗口
#给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长

# # Step 1: 定义需要维护的变量们 (对于滑动窗口类题目,这些变量通常是最小长度,最大长度,或者哈希表)
# x, y = ..., ...
#
# # Step 2: 定义窗口的首尾端 (start, end), 然后滑动窗口
# start = 0
# for end in range(len(s)):
#     # Step 3: 更新需要维护的变量, 有的变量需要一个if语句来维护 (比如最大最小长度)
#     x = new_x
#     if condition:
#         y = new_y
#
#     '''
#     ------------- 下面是两种情况,读者请根据题意二选1 -------------
#     '''
#     # Step 4 - 情况1
#     # 如果题目的窗口长度固定:用一个if语句判断一下当前窗口长度是否达到了限定长度
#     # 如果达到了,窗口左指针前移一个单位,从而保证下一次右指针右移时,窗口长度保持不变,
#     # 左指针移动之前, 先更新Step 1定义的(部分或所有)维护变量
#     if 窗口长度达到了限定长度:
#     # 更新 (部分或所有) 维护变量
#     # 窗口左指针前移一个单位保证下一次右指针右移时窗口长度保持不变
#
#     # Step 4 - 情况2
#     # 如果题目的窗口长度可变: 这个时候一般涉及到窗口是否合法的问题
#     # 如果当前窗口不合法时, 用一个while去不断移动窗口左指针, 从而剔除非法元素直到窗口再次合法
#     # 在左指针移动之前更新Step 1定义的(部分或所有)维护变量
#     while 不合法:
# # 更新 (部分或所有) 维护变量
# # 不断移动窗口左指针直到窗口再次合法
#
# # Step 5: 返回答案
# return ...
class Solution:
    def lengthOfLongestSubstring(self, s):
        maxlen= 0
        hashmap = {}
        start = 0
        for end in range(len(s)):
            hashmap[s[end]]= hashmap.get(s[end],0)+1
            if end- start+1 == len(hashmap):
                maxlen= max(maxlen, end-start+1)
            while end-start+1 >maxlen:
                head  = s[start]
                hashmap[head]= hashmap.get(head) -1
                if hashmap[head] ==0:
                    del hashmap[head]
                start +=1
        return maxlen

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值