【问题标题】:longestSubstring python solution what does it mean --> for t in s.split(c)最长子串python解决方案是什么意思--> for t in s.split(c)
【发布时间】:2021-07-11 20:53:37
【问题描述】:

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

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

A:它想做什么

for t in s.split(c) 

首先通过一组字符串版本

然后,取原来的s(NON-set,或者列出s有重复),把频率小于k的字符拆分为s?然后一次取一个子字符串?所以如果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)

【问题讨论】:

    标签: python recursion divide-and-conquer


    【解决方案1】:

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

    ['aa', 'aaaacdmmmmmm']
    

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

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

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

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

    【讨论】:

    • 谢谢我雪很清楚,所以基本上t是拆分前后的每个子串
    • 对。注意k &gt; 2可以拆分成2个以上的子串。
    • 另一个问题@Barmar 为什么他返回 len(s) 不是 len(s) 字符串的原始总长度?我想我只是想通了,如果没有字符 len
    • 没错。这是递归的基本情况,用于longestSubstring('aa', 2)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2021-05-31
    • 2014-08-24
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    相关资源
    最近更新 更多