题目链接
英文链接:https://leetcode.com/problems/longest-repeating-character-replacement/
中文链接:https://leetcode-cn.com/problems/longest-repeating-character-replacement/
题目详述
给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。
注意:
字符串长度 和 k 不会超过 104。
示例 1:
1 | 输入: |
示例 2:
1 | 输入: |
题目详解
- 滑动窗口,本题类似于 LeetCode76-最小覆盖字串。区别在于:
- 本题找到一个满足条件的区间很容易,当不满足时需要调整区间使满足条件。从更新结果角度来看,是在
while
循环外更新结果,结果是满足条件的最长区间。 - LeetCode76-最小覆盖字串 找到一个满足条件的区间不容易,当找到一个满足条件条件的区间才更新结果,并找到所有满足条件的区间同时更新结果,直到又不满足条件,然后寻找下一个满足条件的区间。从更新结果角度来看,是在
while
循环内更新结果,结果是满足条件的最短区间。
- 本题找到一个满足条件的区间很容易,当不满足时需要调整区间使满足条件。从更新结果角度来看,是在
- 题目说明字符串仅由大写英文字母。可以遍历所有大写字母,统计与当前字母不同的个数,若大于
k
则调整区间直至区间满足条件。 - 时间复杂度为
o(26n)
。
1 | public class LeetCode_00424 { |
- 也可以直接统计区间区间内同种字符出现次数最多的个数,剩下的就是其他字符,当其他字符个数大于
k
则调整区间直至区间满足条件。 - 时间复杂度为
o(n)
。
1 | public class LeetCode_00424 { |