当前位置: 面试刷题>> 替换后的最长重复字符 (经典算法题500道)
**题目描述补充**:
给定一个字符串 `s`,你可以进行至多 `k` 次字符替换操作,使得字符串中某个字符的连续出现次数最大化。返回替换后的最长重复字符子串的长度。
**示例 1**:
输入:
```
s = "ABAB", k = 2
```
输出:
```
4
```
解释: 将两个'A'替换为两个'B', 字符串变为 "BBBB",此时最长重复字符子串是 "BBBB",长度为 4。
**示例 2**:
输入:
```
s = "AABABBA", k = 1
```
输出:
```
4
```
解释: 将中间的1个'A'替换为'B', 字符串变为 "AABBBBA",此时最长重复字符子串是 "BBBB",长度为 4。
**PHP 示例代码**:
```php
function characterReplacement($s, $k) {
$maxLen = 0; // 最长重复字符子串的长度
$maxLengthOfChar = 0; // 当前考虑的字符的最长连续长度
$left = 0; // 滑动窗口的左边界
$charCount = array_fill(0, 26, 0); // 存储每个字符的出现次数
for ($right = 0; $right < strlen($s); $right++) {
// 更新当前字符的计数
$charCount[ord($s[$right]) - ord('A')]++;
// 更新当前考虑的字符的最长连续长度
$maxLengthOfChar = max($maxLengthOfChar, $charCount[ord($s[$right]) - ord('A')]);
// 如果窗口内需要替换的字符数超过了k,移动左边界
if ($right - $left + 1 - $maxLengthOfChar > $k) {
$charCount[ord($s[$left]) - ord('A')]--;
$left++;
}
// 更新最长重复字符子串的长度
$maxLen = max($maxLen, $right - $left + 1);
}
return $maxLen;
}
// 测试示例
echo characterReplacement("ABAB", 2); // 输出 4
echo "\n";
echo characterReplacement("AABABBA", 1); // 输出 4
```
**Python 示例代码**:
```python
def characterReplacement(s, k):
maxLen = 0
maxLengthOfChar = 0
left = 0
charCount = [0] * 26
for right in range(len(s)):
charCount[ord(s[right]) - ord('A')] += 1
maxLengthOfChar = max(maxLengthOfChar, charCount[ord(s[right]) - ord('A')])
if right - left + 1 - maxLengthOfChar > k:
charCount[ord(s[left]) - ord('A')] -= 1
left += 1
maxLen = max(maxLen, right - left + 1)
return maxLen
# 测试示例
print(characterReplacement("ABAB", 2)) # 输出 4
print(characterReplacement("AABABBA", 1)) # 输出 4
```
**JavaScript 示例代码**:
```javascript
function characterReplacement(s, k) {
let maxLen = 0;
let maxLengthOfChar = 0;
let left = 0;
let charCount = new Array(26).fill(0);
for (let right = 0; right < s.length; right++) {
const index = s.charCodeAt(right) - 'A'.charCodeAt(0);
charCount[index]++;
maxLengthOfChar = Math.max(maxLengthOfChar, charCount[index]);
if (right - left + 1 - maxLengthOfChar > k) {
charCount[s.charCodeAt(left) - 'A'.charCodeAt(0)]--;
left++;
}
maxLen = Math.max(maxLen, right - left + 1);
}
return maxLen;
}
// 测试示例
console.log(characterReplacement("ABAB", 2)); // 输出 4
console.log(characterReplacement("AABABBA", 1)); // 输出 4
```
**码小课**网站中有更多关于算法和数据结构的内容分享,大家可以前往学习更多相关知识。