【python-leetcode340-滑动窗口法】至多包含 K 个不同字符的最长子串

【python-leetcode340-滑动窗口法】至多包含 K 个不同字符的最长子串,第1张

概述问题描述:给定一个字符串s,找到至多包含k个不同字符得最长子串的长度。 比如s="cebea",k=2,那么输出结果就是3,因为此时"ebe"满足条件:至多包含

问题描述:给定一个字符串s,找到至多包含k个不同字符得最长子串的长度。

比如s="cebea",k=2,那么输出结果就是3,因为此时"ebe"满足条件:至多包含两个不同字符,且子串最长

比如s="world",k=4,那么输出结果就是4,因为"worl"和"orld"满足条件:至多包含4个不同字符,且子串最长

class Solution:    def lengthOfLongestSubstringKdistinct(self,s,k):        tmp = 0 #用于记录满足条件得最大值        for i in range(1,len(s)+1):步长从1到len(s)+1            for j in range(len(s)-i+1):窗口左端                print(s[j:j+i])                if len(set(s[j:j+i])) == k:如果窗口中取集合后的不同字符就是k个                    tmp = max(tmp,i)更新tmp的值                    print("tmp:{}".format(tmp))        return tmp 最后返回即可

过程:

c
e
b
e
a
ce
tmp:2
eb
tmp:2
be
tmp:2
ea
tmp:2
ceb
ebe
tmp:3
bea
cebe
ebea
cebea

第二种方法:

思路: 一个hash表和一个左边界标记. 遍历字符串将其加入到hash表中, 不同字符多于k个了, 就从左边开始删字符. 直到hash表不同字符长度等于k.此时字符串的长度就是当前字符和左边界的距离。
from collections import defaultdict        使用python中的collections.defaultdict        字典中存储的整型的值默认为0        hash = defaultdict(int)        max_num = 0 用于存放最大值        start = 0 滑动窗口的左端        从字符串左开始遍历        in range(len(s)):            遍历到一个字符,使得字典中对应得字符加1            hash[s[i]] += 1            while len(hash)>k:                hash[s[start]] -= 1                if hash[s[start]] == 0:                    del hash[s[start]]                start += 1            max_num = max(max_num,i-start+1)        return max_num

 由于leetcode没会员,不能解锁,不能保证能过。但思路应该没问题。

总结

以上是内存溢出为你收集整理的【python-leetcode340-滑动窗口法】至多包含 K 个不同字符的最长子串 全部内容,希望文章能够帮你解决【python-leetcode340-滑动窗口法】至多包含 K 个不同字符的最长子串 所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1190067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存