博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Longest Repeating Character Replacement 最长重复字符置换
阅读量:6291 次
发布时间:2019-06-22

本文共 1517 字,大约阅读时间需要 5 分钟。

Given a string that consists of only uppercase English letters, you can replace any letter in the string with another letter at most k times. Find the length of a longest substring containing all repeating letters you can get after performing the above operations.

Note:

Both the string's length and k will not exceed 104.

Example 1:

Input:s = "ABAB", k = 2Output:4Explanation:Replace the two 'A's with two 'B's or vice versa.

Example 2:

Input:s = "AABABBA", k = 1Output:4Explanation:Replace the one 'A' in the middle with 'B' and form "AABBBBA".The substring "BBBB" has the longest repeating letters, which is 4.

这道题给我们了一个字符串,说我们有k次随意置换任意字符的机会,让我们找出最长的重复字符的字符串。这道题跟之前那道很像,都需要用滑动窗口Sliding Window来解。我们首先来想,如果没有k的限制,让我们求把字符串变成只有一个字符重复的字符串需要的最小置换次数,那么就是字符串的总长度减去出现次数最多的字符的个数。如果加上k的限制,我们其实就是求满足(子字符串的长度减去出现次数最多的字符个数)<=k的最大子字符串长度即可,搞清了这一点,我们也就应该知道怎么用滑动窗口来解了吧我们用一个变量start记录滑动窗口左边界,初始化为0,然后我们遍历字符串,每次累加出现字符的个数,然后更新出现最多字符的个数,然后我们判断当前滑动窗口是否满足之前说的那个条件,如果不满足,我们就把滑动窗口左边界向右移动一个,并注意去掉的字符要在counts里减一,直到满足条件,我们更新结果res即可,参见代码如下:

class Solution {public:    int characterReplacement(string s, int k) {        int res = 0, maxCnt = 0, start = 0;        vector
counts(26, 0); for (int i = 0; i < s.size(); ++i) { maxCnt = max(maxCnt, ++counts[s[i] - 'A']); while (i - start + 1 - maxCnt > k) { --counts[s[start] - 'A']; ++start; } res = max(res, i - start + 1); } return res; }};

本文转自博客园Grandyang的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
Ambient occlusion
查看>>
k8s helm 私服chartmuseum minio s3 存储配置
查看>>
Python按行读取文件、写文件
查看>>
OpenCV_颜色直方图的计算、显示、处理、对比及反向投影
查看>>
如何理解JavaScript原型
查看>>
信息检索技术——布尔检索
查看>>
[转] MongoDB 入门
查看>>
【Boost】timer、progress_timer和progress_display
查看>>
最常用的CURL命令大全
查看>>
sudami和achillis对初学者的建议
查看>>
搜狗双拼如何打单韵母字
查看>>
Sealed,new,virtual,abstract与override的区别
查看>>
写给要买Surface的各位兄弟
查看>>
关于遮罩层无效的记录
查看>>
动态操作表格
查看>>
GOF对Builder模式的定义(转载)
查看>>
Photoshop图层混合模式计算公式大全
查看>>
ylb:创建数据库、表,对表的增查改删语句
查看>>
js正則表達式语法
查看>>
Android中Preference的使用以及监听事件分析
查看>>