↓ Skip to main content
  1. Science/
  2. Computer/

0395.Longest Substring with At Least K Repeating Characters

Solution

from collections import Counter

class Solution:
    def longestSubstring(self, s: str, k: int) -> int:
        def dfs(l, r):
            cnt = Counter(s[l : r + 1])
            split = next((c for c, v in cnt.items() if v < k), '')
            if not split:
                return r - l + 1
            i = l
            ans = 0
            while i <= r:
                while i <= r and s[i] == split:
                    i += 1
                if i >= r:
                    break
                j = i
                while j <= r and s[j] != split:
                    j += 1
                t = dfs(i, j - 1)
                ans = max(ans, t)
                i = j
            return ans

        return dfs(0, len(s) - 1)

# 本地测试
if __name__ == "__main__":
    sol = Solution()
    print(sol.longestSubstring("aaabb", 3))      # 3
    print(sol.longestSubstring("ababbc", 2))    # 5
    print(sol.longestSubstring("a", 1))         # 1