不理解“具有至少K个重复字符的最长子串”的本质

时间:2018-01-11 15:52:52

标签: python string algorithm

这是关于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子串的一部分)并充分利用分裂。“

为什么当一个字符过于频繁时,它必然不能成为任何有效子字符串的一部分?

1 个答案:

答案 0 :(得分:2)

从问题:

  

查找给定字符串的最长子字符串T的长度(仅由小写字母组成),以便T中的每个字符显示不少于k次。

问题表明字符串中的每个字符都需要出现至少k次,因此每个字符太少,不能成为任何子字符串的一部分。