首页 > 解决方案 > 最长子串python解决方案是什么意思--> for t in s.split(c)

问题描述

我一直在研究leetCode,遇到了这个问题:给定一个字符串s和一个整数k,返回s的最长子串的长度,使得这个子串中每个字符出现的频率大于等于k。

到目前为止最优雅的解决方案如下,但我不明白

A:它想做什么

for t in s.split(c) 

首先通过一组版本的字符串进行

然后,取原始s(非集合,或s重复列表),将s频率小于的字符拆分到哪里k?然后一次取一个子字符串?s="aabaaaacdmmmmmm"所以如果k=2

我们"b"先拆分然后评估 aa 然后拆分并不确定我们得到的最大值是"c"什么aabaaaa

def longestSubstring(s, k):
    for c in set(s):
        if s.count(c) < k:
            return max(longestSubstring(t, k) for t in s.split(c))
    return len(s)

标签: pythonrecursiondivide-and-conquer

解决方案


如果c == 'b',s.split(c)将输入拆分为

['aa', 'aaaacdmmmmmm']

然后它递归地调用自己以获取每个中最长子字符串的长度。

longestSubstring('aa', 2)将返回2,因为没有一个字符的频率小于 2。

longestSubstring('aaaacdmmmmmm', 2)将进行更多递归,最终返回,6因为这是mmmmmm.

max(2, 6)6return ,由函数返回。


推荐阅读