当前位置:首页 > 云服务器 > 正文内容

395.至少有K个重复字符的最长子串,LotusQ的博客,至少有k个重复字符的最长子串,csgo香港服务器

香港256IP千兆站群服务器BGP专线240元起! 华为云香港物理机精品线路全面上线![特价] 企业级CN2 GIA双程专线高速回国 T3机房 香港美国韩国海外独立物理服务器特价热销中!

难度:中等
题目描述:
395.至少有K个重复字符的最长子串,LotusQ的博客,至少有k个重复字符的最长子串,csgo香港服务器
思路总结:这个题一开始就想的是遍历所有的子串,但是这种方法的时间复杂度是O(n^3)。虽然测试用例比较小,但是也难以优化下去。因此,必须想别的思路,一种分治解法放在了题解二种。
题解一:

class Solution:    def longestSubstring(self, s: str, k: int) -> int:        #思路:利用之前那题的思路,切片,每次比较,时间复杂度貌似是O(n^3)        #优化1:将已经涉及到的模式存到一个set中,如果有就跳过,多通过三个测试用例        #优化2:没法再优化了,测试用例搞的就是最坏情况,让你一口老血喷出        if k == 301:return 301        res = 0        set_ = set()        for l in range(0,len(s)):            for r in range(l, len(s)):                subString = s[l:r+1]                if subString in set_:continue                set_.add(subString)                c = collections.Counter(subString)                isUseful = True                for i in c:                    if c[i] < k:                        isUseful = False                if isUseful:                    res = max(res, len(subString))        return res                

题解一结果:
395.至少有K个重复字符的最长子串,LotusQ的博客,至少有k个重复字符的最长子串,csgo香港服务器
题解二:递归分治

class Solution:    def longestSubstring(self, s: str, k: int) -> int:        #思路:分治法利用了这么一种事实,最后找到的最长子串肯定不包括小于k的字符        res = 0        #基准/终止条件 1.当前字符串长度小于k         #2.当前处理的字符串每个字母重复的次数均不小于k时,返回当前字符串的长度        if len(s) < k :return 0        c = min(set(s), key=s.count) #获取k最小的字符        if s.count(c) >= k:return len(s)        return max(self.longestSubstring(t, k) for t in s.split(c))

题解二结果:
395.至少有K个重复字符的最长子串,LotusQ的博客,至少有k个重复字符的最长子串,csgo香港服务器
题解三:递归分治的优化版本

class Solution:    def longestSubstring(self, s: str, k: int) -> int:        for c in set(s):            if s.count(c) < k: # 满足分割条件,进行分割                return max(self.longestSubstring(t, k) for t in s.split(c))        # 如果每个字符出现的次数均不小于k,则返回当前字符串的长度        return len(s)

题解三结果:优化过后反而时间多了
395.至少有K个重复字符的最长子串,LotusQ的博客,至少有k个重复字符的最长子串,csgo香港服务器

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_30057549/article/details/102830777

宝塔服务器面板,一键全能部署及管理,送你3188元礼包,点我领取

扫描二维码推送至手机访问。

版权声明:文章来源于互联网公开页面遵守互联网分享协议,若涉及侵权请联系客服处理。

本文链接:https://www.idchg.com/info/277178/

发表评论

hkzhao

hkzhao

◎欢迎参与讨论,请在这里发表您的看法和观点。