package
0.0.0-20241220224003-b7cf03a90b2b
Repository: https://github.com/szhou12/leetcode-go.git
Documentation: pkg.go.dev
# README
424. Longest Repeating Character Replacement
Solution idea
Sliding Window (Flex模版)
思路总结
解法一 (朴素解法)
- 题目要求窗口内的字符全是同一个字母,朴素的解法是“挨个试”:把26个大写字母挨个当作窗口内的目标字母,滑一遍字符串,在变换次数的限制下,看以当前字母为窗口目标的最长窗口是多少。
- 窗口为 左闭右闭 区间,即
[left, right]
- 右边界可延伸条件为:(变换次数 k > 0 OR 当前右边界所指元素是目标字母不需变换)
- 注:一开始我写的时候只有 k > 0. 但发现 k = 0 的情况时发现这样无法使有连续目标字母的子串伸长。分析 k = 0 的情况帮我确认了这个条件。
Time complexity = $O(26n) = O(n)$
解法二 (优雅解法)
- 滑窗框住一段区间。计算区间内占多数的字母,其他占少数的字母就是需要被替换掉的。
- 一个合法的窗口满足:
total window size L - Majority element A <= k
- 怎么找 Majority?
- 转化为 记录频次。(aka. count[])
Resource
【每日一题】LeetCode 424. Longest Repeating Character Replacement 10/6 2021