Longest Substring with At Least K Repeating Characters

https://leetcode.com/contest/leetcode-weekly-contest-3/problems/longest-substring-with-at-least-k-repeating-characters/

这道题用的是recursion,思路比较难想。

首先我们要意识这有两种情况,在s的所有char中,出现次数最小的char如果它的freq 都大于或等于k,则s本身就是我们要求解的结果。

如果char次数小于k,那么这个char就是工具人了。。它帮助我们分隔出剩余所有可能满足条件的substring,因为这里的char不会再被使用,即使使用了也无法满足大于等于k的条件。那么剩下就用recursion devide and conquer。

from collections import Counter
class Solution:
    def longestSubstring(self, s: str, k: int) -> int:
        if s =="":
            return 0
        c = Counter(s)
        small = ""
        val = min([val for val in c.values()])
        for key,v in c.items():
            if v == val:
                small = key
                break
        if c.get(small) >= k:
            return len(s)
        
        return max([self.longestSubstring(t,k) for t in s.split(small)])
        

Last updated

Was this helpful?