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

Posted

技术标签:

【中文标题】最长子串python解决方案是啥意思--> for t in s.split(c)【英文标题】: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)

【问题讨论】:

【参考方案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)

以上是关于最长子串python解决方案是啥意思--> for t in s.split(c)的主要内容,如果未能解决你的问题,请参考以下文章

回文子串解法大全

516. 最长回文子序列(Python)

动态规划——最长公共子序列与最长公共子串 (含Python实现代码)

两个字符串的最长公共子串python代码

领扣-无重复字符的最长子串-Python实现

python经典算法题:无重复字符的最长子串