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

Not Understanding Essence of “Longest Substring with At Least K Repeating Characters”

这是关于leetcode问题395的一个问题,题为"最长的子字符串,至少有k个重复字符。"

有人发布了一个非常简洁的解决方案(在Python中),我很难理解这种方法的核心思想。我可以机械地遵循代码(在下面复制),但我不能完全理解这里的核心思想。例如,我看到它对字符串中的字符进行计数,并在计数小于指定的最大字符数(k)的字符处递归地拆分字符串。

1
2
3
4
5
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子字符串的一部分),并充分利用拆分。"

为什么当字符太少时,它就不一定是任何有效子字符串的一部分?


从问题中:

Find the length of the longest substring T of a given string (consists of lowercase letters only) such that every character in T appears no less than k times.

该问题指出,字符串中的每个字符至少需要出现k次,因此,太少的每个字符不能是任何子字符串的一部分。