package com.heu.wsq.leetcode.arr;
/**
* 424. 替换后的最长重复字符
* @author wsq
* @date 2021/2/2
* 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。
* 注意:字符串长度 和 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
*/
public class CharacterReplacement {
public int characterReplacement(String s, int k){
// 统计26个字母出现的次数
int[] num = new int[26];
int n = s.length();
// 维护最长重复的字串长度
int maxn = 0;
// 用于保证目前最长的滑动窗口大小
int left = 0;
// 用于扩展滑动窗口长度
int right = 0;
while (right < n){
num[s.charAt(right) - 'A']++;
maxn = Math.max(maxn, num[s.charAt(right) - 'A']);
// 判断是否需要窗口滑动
if (right - left + 1 - maxn > k){
num[s.charAt(left) - 'A']--;
left += 1;
}
right++;
}
return right - left;
}
}
424. 替换后的最长重复字符(可变长的滑动窗口)
最长重复字符替换
最新推荐文章于 2025-09-19 15:47:24 发布
834

被折叠的 条评论
为什么被折叠?



