5 条题解

  • 1
    @ 2026-5-15 20:41:35

    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
    上传者