最长子串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 > 2
可以拆分成2个以上的子串。
另一个问题@Barmar 为什么他返回 len(s) 不是 len(s) 字符串的原始总长度?我想我只是想通了,如果没有字符 len
没错。这是递归的基本情况,用于longestSubstring('aa', 2)
以上是关于最长子串python解决方案是啥意思--> for t in s.split(c)的主要内容,如果未能解决你的问题,请参考以下文章