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

问题描述:给定一个字符串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

猜你喜欢

转载自www.cnblogs.com/xiximayou/p/12288936.html