很久没有做hihocoder了,之前刷leetcode,其实工作找完了不知道刷这些有什么用,可能训练下代码的写法吧,双指针的就写得略烂,将就看看吧,有设置几个earlyStoping,这样可能时间优化一些。思路是hiho网站的discuss的分析,就不详细介绍了。
num = int(input().strip())
letter = list(input().strip())
tot = [0]*27 # 所有的数量
cnt = [0] * 27 # 在i-j中的数量
for a in letter:
tot[ord(a)-ord('a')] += 1
max_len = 0
i = 0
j = 0
cnt[ord(letter[0]) - ord('a')] = 1
for i in range(len(letter)):
if i!=0:
cnt[ord(letter[i-1]) - ord('a')] -= 1
while(j<len(letter)):
while min(cnt)>=num and j<len(letter):
max_len = max(max_len, j-i+1)
j+=1
cnt[ord(letter[j]) - ord('a')] += 1
if max(tot) < j-i+1:
break
for k in range(27):
if tot[k] >= j - i + 1 and (j - i + 1 - cnt[k]) <= num:
max_len = max(max_len, j - i + 1)
if j==len(letter)-1:
break
else:
j+=1
cnt[ord(letter[j]) - ord('a')] += 1
print(max_len)