5 条题解
-
1
n , k = map(int , input().split()) lst = input() count = 0 for i in range (1 , 27) :#枚举一个集合里面有几种元素 s = {}#集合 for j in range (0 , min(ik , n)) :#先取前几个元素作为滑动窗口 if lst[j] not in s : s[lst[j]] = 0 s[lst[j]] += 1 for j in range (min(ik , n) , n) : cc = 0 for a , b in s.items() : if b == k : cc += 1 if cc == i : count += 1 if lst[j] not in s : s[lst[j]] = 0 s[lst[j]] += 1 s[lst[j - i*k]] -= 1 #这里滑动窗口的这种写法可以让滑动窗口的时间复杂度降低至O(1) cc = 0#补上一段检测最后一个元素 for a , b in s.items() : if b == k : cc += 1 if cc == i : count += 1 print(count)
信息
- ID
- 170
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 普及
- 标签
- 递交数
- 760
- 已通过
- 184
- 上传者