【LeetCode3】无重复字符的最长子串(滑动窗口)

举报
野猪佩奇996 发表于 2022/01/23 00:14:04 2022/01/23
【摘要】 1.题目 2.思路 滑动窗口,从左到右遍历逐个元素,如果当前元素没有在滑动窗口内(即所需要)则加入;如果当前元素A已经在滑动窗口中存在了,那就要干活剔除左边元素了(滑动窗口中左边第一个A及其左边...

1.题目

在这里插入图片描述
在这里插入图片描述

2.思路

滑动窗口,从左到右遍历逐个元素,如果当前元素没有在滑动窗口内(即所需要)则加入;如果当前元素A已经在滑动窗口中存在了,那就要干活剔除左边元素了(滑动窗口中左边第一个A及其左边的所有元素——while循环逐个剔除),注意不是只剔除滑动窗口最左边的元素,如abcb字符串——剔除ab后只剩下cb。

注意python的容器使用:
(1)python中的容器set,逐个添加元素是用add,批量添加则是存入一个list中再updateset中。

names = []
names_set = set(names)
##单个添加
names_set.add(‘Jenny’)
names_set.add(‘Ellena’)
print(names_set)##{‘Jenny’, ‘Ellena’}
##批量添加
new_names = [‘Jenny’, ‘Ellena’, ‘Alice’, ‘Candy’, ‘David’, ‘Hally’, ‘Bob’, ‘Isen’, ‘Karl’]
names_set.update(new_names)
print(names_set) ##{‘Bob’, ‘Hally’, ‘Ellena’, ‘Jenny’, ‘Candy’, ‘Isen’, ‘Karl’, ‘Alice’, ‘David’}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

(2)list、set容器移除元素都是用remove或者pop操作。
(3)python中的容器都能用下标索引定位元素。

3.代码

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        if not s:
            return 0
        Left = 0
        LookUp = set()# 滑动窗口
        n = len(s)
        MaxLen = 0
        TempLen = 0
        for i in range(n):
            TempLen += 1
            while s[i] in LookUp:
                LookUp.remove(s[Left])
                Left += 1
                TempLen -= 1
            if TempLen > MaxLen:
                MaxLen = TempLen
            LookUp.add(s[i])
        return MaxLen

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。

原文链接:andyguo.blog.csdn.net/article/details/117047447

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。