一.题目:
找出一个字符串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)
本文介绍了一种寻找字符串中满足特定重复次数条件的最长子字符串的算法。通过递归方式,排除那些出现次数低于预设阈值的字符,从而找到满足条件的最长连续子串。举例说明了算法的应用场景。
728

被折叠的 条评论
为什么被折叠?



