这是关于LeetCode的问题#395的问题,题为"Longest Substring with At Least K Repeating Characters."
有人发布了一个非常简洁的解决方案(在Python中),我无法理解这种方法的核心理念。我可以机械地遵循代码(下面再现),但我不能完全理解这里的核心思想。例如,我看到它计算字符串中的字符,并递归地将字符串拆分为计数小于规定的最大字符数(k)的字符。
def longestSubstring(self, s, k):
for c in set(s):
if s.count(c) < k:
return max(self.longestSubstring(t, k) for t in s.split(c))
return len(s)
作者说(重点补充),“如果每个角色出现至少k次,则整个字符串都可以。否则用最不频繁的字符分割(因为它总是太罕见,因此不能成为任何ok子串的一部分)并充分利用分裂。“
为什么当一个字符过于频繁时,它必然不能成为任何有效子字符串的一部分?
答案 0 :(得分:2)
从问题:
查找给定字符串的最长子字符串T的长度(仅由小写字母组成),以便T中的每个字符显示不少于k次。
问题表明字符串中的每个字符都需要出现至少k次,因此每个字符太少,不能成为任何子字符串的一部分。