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次,因此,太少的每个字符不能是任何子字符串的一部分。