题解 | #至少有 K 个重复字符的最长子串#

至少有 K 个重复字符的最长子串

http://www.nowcoder.com/practice/5aabbcfc45e2443ab7b8c9988bca6616

分治法,找到每个不符合的区间再依次向下找直至区间长度小于 k, 比较其中的最大字符串长度

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param s string字符串 
# @param k int整型 
# @return int整型
#
from collections import defaultdict
class Solution:
    def longestSubstring(self , s: str, k: int) -> int:
        # write code here
        def subString(l, r):
            if r - l < k:
                return 0
            count = defaultdict(list)
            flag = True
            for i in range(l, r):
                count[s[i]].append(i)
            data = []
            for i, v in count.items():
                if len(v) < k:
                    flag = False
                    data += v
            if flag:
                return r - l
            data.sort()
            max_l = 0
            data = [l] + data + [r]
            for i in range(1, len(data)):
                if i == 1:
                    max_l = max(subString(data[i - 1], data[i]), max_l)
                else:
                    max_l = max(subString(data[i - 1] + 1, data[i]), max_l)
            return max_l
        return subString(0, len(s))
全部评论

相关推荐

面了100年面试不知...:今年白菜这么多,冬天可以狂吃了
点赞 评论 收藏
分享
苗条的伊泽瑞尔最喜欢...:同28届被压力了,电科✌就不能去卷算法吗?把Java留给我们双非卷
投递快手等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务