[2024. Maximize the Confusion of an Exam](https://leetcode.com/problems/maximize-the-confusion-of-an-exam/)
### 題目描述
A teacher is writing a test with `n` true/false questions, with `'T'` denoting true and `'F'` denoting false. He wants to confuse the students by **maximizing** the number of **consecutive** questions with the **same** answer (multiple trues or multiple falses in a row).
You are given a string `answerKey`, where `answerKey[i]` is the original answer to the i^th^ question. In addition, you are given an integer `k`, the maximum number of times you may perform the following operation:
* Change the answer key for any question to `'T'` or `'F'` (i.e., set `answerKey[i]` to `'T'` or `'F'`).
Return *the **maximum** number of consecutive* `'T'`s or `'F'`s *in the answer key after performing the operation at most* `k` *times.*
### 範例
**Example 1:**
```
Input: answerKey = "TTFF", k = 2
Output: 4
Explanation: We can replace both the 'F's with 'T's to make answerKey = "TTTT".
There are four consecutive 'T's.
```
**Example 2:**
```
Input: answerKey = "TFFT", k = 1
Output: 3
Explanation: We can replace the first 'T' with an 'F' to make answerKey = "FFFT".
Alternatively, we can replace the second 'T' with an 'F' to make answerKey = "TFFF".
In both cases, there are three consecutive 'F's.
```
**Example 3:**
```
Input: answerKey = "TTFTTFTT", k = 1
Output: 5
Explanation: We can replace the first 'F' to make answerKey = "TTTTTFTT"
Alternatively, we can replace the second 'F' to make answerKey = "TTFTTTTT".
In both cases, there are five consecutive 'T's.
```
**Constraints**:
* `n` == `answerKey.length`
* 1 <= `n` <= 5 * 10^4^
* `answerKey[i]` is either `'T'` or `'F'`
* 1 <= `k` <= `n`
### 解答
#### Python
```python=
class Solution:
def maxConsecutiveAnswers(self, answerKey: str, k: int) -> int:
ans = k
counter = Counter(answerKey[:k])
left = 0
for right in range(k, len(answerKey)):
counter[answerKey[right]] += 1
while min(counter['T'], counter['F']) > k:
counter[answerKey[left]] -= 1
left += 1
ans = max(ans, right - left + 1)
return ans
```
> [name=Ron Chen][time=Fri, Jul 7, 2023]
#### Javascript
```javascript=
function maxConsecutiveAnswers(answerKey, k) {
let max = 0;
let left = 0;
let countT = 0;
let countF = 0;
for (let i = 0; i < answerKey.length; i++) {
if (answerKey[i] === 'F') countF++;
while (countF > k) {
if (answerKey[left] === 'F') countF--;
left++;
}
max = Math.max(max, i - left + 1);
}
left = 0;
for (let i = 0; i < answerKey.length; i++) {
if (answerKey[i] === 'T') countT++;
while (countT > k) {
if (answerKey[left] === 'T') countT--;
left++;
}
max = Math.max(max, i - left + 1);
}
return max;
}
```
> 做了一週sliding window,終於一次過了,思路跟前天的1493題一樣,只是這次T跟F都要各數一次。
> [name=Marsgoat][time=Fri, Jul 7, 2023]
#### C#
```csharp=
public class Solution {
public int MaxConsecutiveAnswers(string answerKey, int k) {
int max = 0;
int left = 0;
int tCount = 0;
int fCount = 0;
for (int right = 0; right < answerKey.Length; right++) {
if (answerKey[right] == 'T') {
tCount++;
} else {
fCount++;
}
while (tCount > k && fCount > k) {
if (answerKey[left++] == 'T') {
tCount--;
} else {
fCount--;
}
}
max = Math.Max(max, right - left + 1);
}
return max;
}
}
```
> [name=Jim][time=Jul 8, 2023]
### Reference
[回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)