一.题目:
找出一个字符串T的最长连续子字符串,要求这个子字符串中每个字符出现的次数都最少为K,求出这个子字符串的最长长度。
Example 1:
Input:
s = "aaabb", k = 3
Output:
3
The longest substring is "aaa", as 'a' is repeated 3 times.
Example 2:
Input:
s = "ababbc", k = 2
Output:
5
The longest substring is "ababb", as 'a' is repeated 2 times and 'b' is repeated 3 times.
二.解题思路:
网上看到一种解题思路很巧妙,如下所示:
如果字符串s的长度少于k,返回0;
如果一个字符在s中出现的次数少于k次,那么所有的包含这个字符的子字符串都不能满足题意。所以,应该去不包含这个字符的子字符串继续寻找。
如果s中的每个字符出现的次数都大于k次,符合要求返回s的长度。
代码如下:
class Solution(object):
def longestSubstring(self, s, k):
"""
:type s: str
:type k: int
:rtype: int
"""
if len(s) < k:
return 0
for i in set(s):
if s.count(i) < k:
return max(self.longestSubstring(s1,k) for s1 in s.split(i))
return len(s)