本题可用“双指针滑动窗口 + 频次数组”解决。
我们用两个指针 left
、right
维护一个当前合法的窗口 [left, right]
,并用数组统计窗口内各个字母(仅 A–Z、a–z)的出现次数。数字不受限制,无需计数。
每次把 right
右移纳入新字符:
给定一个字符串 s 和一个整数 k,s 由大小写字母和数字组成,请找出 s 的一个最长连续子串,使得这个子串中的大小写字母的出现次数都不超过 k 。输出这个子串的长度。
第一行是一个字符串 s,s 由大小写英文字母、数字组成。
第二行是一个整数 k,表示允许每个字符在子串中出现的最大次数。
输出一个整数,表示满足条件的最长子串的长度。
输入
abcabcbb
2
输出
6
说明
满足条件的最长子串是 "abcabc",其中每个字符('a', 'b', 'c')都出现了恰好 2 次,且不超过 2 。因此长度为 6 。