【题目描述】

给你一个字符串 ​​s​​​ 和一个整数 ​​k​​​ 。你可以选择字符串中的任一字符,并将其更改为任何其他大写英文字符。该操作最多可执行 ​​k​​ 次。

在执行上述操作后,返回包含相同字母的最长子字符串的长度。

​https://leetcode.cn/problems/longest-repeating-character-replacement/​


【示例】

【LeeCode】424. 替换后的最长重复字符_字符串


【代码】admin

思路:双指针

package com.company;
import java.util.*;

// 2023-2-24
class Solution {
public int characterReplacement(String s, int k) {
int len = s.length();
int[] num = new int[26];
int left = 0;
int right = 0;
int max = 0;

while (right < len){
num[s.charAt(right) - 'A']++;
max = Math.max(max, num[s.charAt(right) - 'A']);
// right-left+1表示的字符长度, 减去max 就是说去除重复字符后,剩余的那个字符(可变字符)数量
if (right - left + 1 - max > k){
num[s.charAt(left) - 'A']--;
left++;
}
right++;
}
return right - left;
}
}

public class Test {
public static void main(String[] args) {
new Solution().characterReplacement("ABAB", 2); // 输出: 4
new Solution().characterReplacement("AABABBA",1); // 输出:4
}
}