【Leetcode】424. Longest Repeating Character Replacement
来源:互联网 发布:linux 创建swap 编辑:程序博客网 时间:2024/06/17 07:32
题目:https://leetcode.com/problems/longest-repeating-character-replacement/#/description
题目给定一个string和一个k。最多可以把k个字符更改,且更改以后必须相同。返回最长的连续的相同字符数目。
这个题目可以在On内解决,使用滑动窗口的思想。两个指针start和end,end向后移动,每一次都找出start到end这个窗口内出现次数最多的字符,那么这个窗口内就应该把其余的字符改成这个字符。需要更改的数目是end - start + 1 - maxCount。如果说数目大于k,那么需要start向后移动。
有一个问题,start向后移动了以后,刚被移出窗口的字符的数目要减少一,如果说这个字符是最大count,那么可能需要修改当前最大count,不过其实不需要。因为,如果包含了另一个字符也有相同的数目,那么这种情况明显不许需要,最大count还可以延续使用。如果只有当前字符对应最大count,那么移出之后,最大count肯定减少1,这种情况理应更新,但是可以不更新,我们只要维持当前的窗口大小即可,虽然这个窗口可能不合法(因为用的是之前的maxcount)。不变窗口大小,是因为我们只关注最大值,所以,只要窗口内最大count无法超过之前的值,那么就永远无法更新结果的最大值。省去更新最大count的操作既不影响结果值,又可以降低复杂度,因此是一个很好的方法。
代码:
public int characterReplacement(String s, int k) { int max = 0, start = 0, end = 0, max_cur = 0; int[] count = new int[26]; while(end < s.length()){ max_cur = Math.max(max_cur, ++count[s.charAt(end) - 'A']); while(end - start + 1 - max_cur > k) count[s.charAt(start++) - 'A']--; max = Math.max(max, end - start + 1); end++; } return max;}
最后说一下为什么滑动窗口的方法可以得到最优解。因为,第一次延伸end可以得到起始位置为0的子串的结果。当end太大,不满足条件时,start前移一次,继而end又可以后移得到start在1处的最优解。。。持续下去,最终可以得到start在所有位置的解,从而得到最优解。滑动窗口实际上是得到了start在所有位置的子串的结果,但确是一个On级别的算法。
0 0
- 【LeetCode】 424. Longest Repeating Character Replacement
- [leetcode]424. Longest Repeating Character Replacement
- Leetcode-424. Longest Repeating Character Replacement
- [LeetCode]424. Longest Repeating Character Replacement
- 【Leetcode】424. Longest Repeating Character Replacement
- LeetCode笔记:424. Longest Repeating Character Replacement
- Leetcode 424. Longest Repeating Character Replacement
- leetcode 424. Longest Repeating Character Replacement
- 424. Longest Repeating Character Replacement
- 424. Longest Repeating Character Replacement
- 424. Longest Repeating Character Replacement
- 424. Longest Repeating Character Replacement
- 424. Longest Repeating Character Replacement**
- 424. Longest Repeating Character Replacement
- 424. Longest Repeating Character Replacement
- 424. Longest Repeating Character Replacement
- 424. Longest Repeating Character Replacement
- [LeetCode] 424. Longest Repeating Character Replacement 解题报告
- chosen宽度太小
- 点到平面的距离公式的推导
- 最大堆实现
- PHP开源Apache日志分析工具收集与比较
- Java学习笔记之配置环境
- 【Leetcode】424. Longest Repeating Character Replacement
- git upload
- Unity3D 5.X 新版AssetBundle使用方案及策略
- 每位开发人员都应铭记的10句编程谚语
- activiti工作流的web流程设计器整合视频教程 SSM和独立部署
- nginx 配置 laravel
- React-Native 之ListView
- 数据结构-并查集
- 解析Xcode项目文件中的project.pbxproj:Object-C实现