一位老师正在出一场由 n
道判断题构成的考试,每道题的答案为 true (用 'T'
表示)或者 false (用 'F'
表示)。老师想增加学生对自己做出答案的不确定性,方法是 最大化 有 连续相同 结果的题数。(也就是连续出现 true 或者连续出现 false)。
给你一个字符串 answerKey
,其中 answerKey[i]
是第 i
个问题的正确结果。除此以外,还给你一个整数 k
,表示你能进行以下操作的最多次数:
- 每次操作中,将问题的正确答案改为
'T'
或者'F'
(也就是将answerKey[i]
改为'T'
或者'F'
)。
请你返回在不超过 k
次操作的情况下,最大 连续 'T'
或者 'F'
的数目。
示例 1:
输入:answerKey = "TTFF", k = 2 输出:4 解释:我们可以将两个 'F' 都变为 'T' ,得到 answerKey = "TTTT" 。 总共有四个连续的 'T' 。
示例 2:
输入:answerKey = "TFFT", k = 1 输出:3 解释:我们可以将最前面的 'T' 换成 'F' ,得到 answerKey = "FFFT" 。 或者,我们可以将第二个 'T' 换成 'F' ,得到 answerKey = "TFFF" 。 两种情况下,都有三个连续的 'F' 。
示例 3:
输入:answerKey = "TTFTTFTT", k = 1 输出:5 解释:我们可以将第一个 'F' 换成 'T' ,得到 answerKey = "TTTTTFTT" 。 或者我们可以将第二个 'F' 换成 'T' ,得到 answerKey = "TTFTTTTT" 。 两种情况下,都有五个连续的 'T' 。
提示:
n == answerKey.length
1 <= n <= 5 * 104
answerKey[i]
要么是'T'
,要么是'F'
1 <= k <= n
C++
class Solution {
public:
int getLength(string answerKey, int k) {
int n=answerKey.size();
int count=0;
int left=0;
int right=0;
int ans=0;
for(int i=0;i<n;i++) {
if(answerKey[i]=='F') {
count++;
while(count>k) {
if(answerKey[left]=='F') {
count--;
}
left++;
}
}
ans=max(ans,right-left+1);
right++;
}
return ans;
}
int maxConsecutiveAnswers(string answerKey, int k) {
int a=getLength(answerKey,k);
int n=answerKey.size();
for(int i=0;i<n;i++) {
if(answerKey[i]=='T') {
answerKey[i]='F';
} else {
answerKey[i]='T';
}
}
int b=getLength(answerKey,k);
return max(a,b);
}
};
java
class Solution {
public int getLength(String tmp, int k) {
int left = 0;
int right = 0;
int count = 0;
int ans = 0;
int n = tmp.length();
for (int i = 0; i < n; i++) {
if (tmp.charAt(i) == 'F') {
count += 1;
while (count > k) {
if (tmp.charAt(left) == 'F') {
count -= 1;
}
left += 1;
}
}
ans = Math.max(ans, right - left + 1);
right += 1;
}
return ans;
}
public int maxConsecutiveAnswers(String answerKey, int k) {
StringBuffer tmp = new StringBuffer();
int n = answerKey.length();
for (int i = 0; i < n; i++) {
if (answerKey.charAt(i) == 'F') {
tmp.append('T');
} else {
tmp.append('F');
}
}
return Math.max(getLength(answerKey, k), getLength(tmp.toString(), k));
}
}
python
class Solution:
def getLength(self, tmp, k):
left = 0
right = 0
n = len(tmp)
count = 0
ans = 0
for i in range(n):
if tmp[i] == 'F':
count += 1
while count > k:
if tmp[left] == 'F':
count -= 1
left += 1
ans = max(ans, right - left + 1)
right += 1
return ans
def maxConsecutiveAnswers(self, answerKey: str, k: int) -> int:
tmp = list(answerKey)
a = self.getLength(tmp, k)
for i in range(len(tmp)):
if tmp[i] == 'F':
tmp[i] = 'T'
else:
tmp[i] = 'F'
b = self.getLength(tmp, k)
return max(a, b)