Python | Leetcode Python题解之第395题至少有K个重复字符的最长子串
题目:
题解:
class Solution:
def longestSubstring(self, s1: str, k: int) -> int:
if k == 1: return len(s1)
n = len(s1)
res = 0
for c in range(1, len(set(s1)) + 1):
# 滑窗中字母种类个数恰好为 c
freq = Counter()
l = cnt = tcnt = 0
for r, ch in enumerate(s1):
if freq[ch] == 0:
cnt += 1
tcnt += 1
if freq[ch] == k - 1:
cnt -= 1
freq[ch] += 1
while tcnt > c:
lch = s1[l]
if freq[lch] == k:
cnt += 1
if freq[lch] == 1:
tcnt -= 1
cnt -= 1
freq[lch] -= 1
l += 1
if tcnt == c and cnt == 0:
res = max(res, r - l + 1)
return res