会员专享
请先
登录,登录后可使用今日免费解锁;
开通会员,或
购买
该题目所属题库
,可解锁完整内容。
解题思路
这是「无重复字符最长子串」的计数变种:统计长度至少为 k、且内部字符互不相同的连续子串个数。用滑动窗口。
- 维护当前无重复窗口 [left,right]。右端每加入一个字符,若与窗口内字符重复,就把 left 推到该字符上次出现位置的右边。
- 此时所有 s[start..right](left≤start≤right)都不含重复字符。
- 其中长度 ≥k 的充要条件是 start≤right−k+1。因此以 right 为右端的合法子串有 max(0, (right−k+1)−left+1) 个。
- 对每个右端点累加即可。注意按出现位置计数:样例里两段 abc 要算两次。
- 只输出最长长度、把 ≥k 写成 >k、或 O(n2) 枚举,都是常见假解。答案可能超过 32 位整数。