思路:
- 第一时间感觉很像滑动窗口的思路,就是直觉,感觉没什么道理
- 那怎样确认窗口的长度呢
- 只改变K次,就可以求到最大连续的T或者F,那就只要求出窗口里相较少的字符个数,并保证他的个数等于K的时候窗口的最大长度就可以了
- 用i,j来控制窗口的长度,如果窗口里较少字符的个数大于K,
i++
,判断原来i位置上的是T还是F,然后把它的个数减1,最后在每一次循环中维护窗口长度的最大值就可以了 - 时间复杂度O(n)
class Solution {
public:
int maxConsecutiveAnswers(string answerKey, int k) {
int cntT = 0, cntF = 0;
int NeedChanged = 0;
int len = answerKey.length();
int i = 0;
int ans = 1;
for(int j = 0; j < len; j++){
if(answerKey[j] == 'T') cntT++;
else cntF++;
NeedChanged = min(cntT, cntF);
while(NeedChanged > k){
if(answerKey[i] == 'T') cntT--;
else cntF--;
i++;
NeedChanged = min(cntT, cntF);
}
ans = max(ans, j - i + 1);
}
return ans;
}
};