5 条题解
-
1
根据大佬给出的O(n)做法的思路,提供一种python实现
def check(start, end): cnt = 0 for i in range(26): if lst[i][end-1] - (lst[i][start-2] if start >= 2 else 0) == k: cnt += 1 return cnt n, k = map(int,input().split(" ")) inp = input() lst = [[0] * n for i in range(26)] #n列,26行(第一列为0) for i in range(26): letter = chr(ord('a') + i) for j in range(len(inp)): if letter == inp[j]: lst[i][j] = lst[i][j-1] + 1 else: lst[i][j] = lst[i][j-1] ans = 0 for i in range(1,27): length = i * k for j in range(length,n + 1): l = j - length + 1 r = j if check(l, r) == i: ans += 1 print(ans)
信息
- ID
- 170
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 普及
- 标签
- 递交数
- 760
- 已通过
- 184
- 上传者