给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。 注意: 来源:力扣(LeetCode) 60 ms 7.2 MB 4 ms 7.3 MB
1. 题目
在执行上述操作后,找到只包含重复字母的最长子串的长度。
字符串长度 和 k 不会超过 104。示例 1: 输入: s = "ABAB", k = 2 输出: 4 解释: 用两个'A'替换为两个'B',反之亦然。 示例 2: 输入: s = "AABABBA", k = 1 输出: 4 解释: 将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。 子串 "BBBB" 有最长重复字母, 答案为 4。
链接:https://leetcode-cn.com/problems/longest-repeating-character-replacement
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2. 解题
[i,j]
区间内最多的数量的字符保留,其余的”替换掉”class Solution { public: int characterReplacement(string s, int k) { if(k >= s.size()) return s.size(); int i = 0, j = 0, ans = 0; vector<int> count(26,0); while(j < k) count[s[j++]-'A']++; while(j < s.size()) { count[s[j++]-'A']++; if(j-i-*max_element(count.begin(),count.end()) <= k)//需要替换的个数 ans = max(ans, j-i); else count[s[i++]-'A']--; } return ans; } };
class Solution { public: int characterReplacement(string s, int k) { if(k >= s.size()) return s.size(); int i = 0, j = 0, idx, maxc = 0, ans = 0; vector<int> count(26,0); while(j < s.size()) { idx = s[j++]-'A'; count[idx]++; if(maxc < count[idx]) //只有新加入的字符的个数大于历史重复字符最高数时,才能更新答案 maxc = count[idx]; if(j-i-maxc <= k)//需要替换的个数 ans = max(ans, j-i); else count[s[i++]-'A']--; } return ans; } };
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算