题目描述:
题解:
- 敷衍的滑动窗口
```python
滑动窗口,窗口长度从k开始
当前窗口长度为T
每个窗口中T数量为nt,F数量为nf
n= min(nt,nf) 判断n 是否小于<=k,若是,则最大长度为T
answerKey = “TTFF” k = 2 answerKey = “TTFTTFTT” k = 1
max_window = 0 for T in range(k,len(answerKey)+1): for start in range(0,len(answerKey)-T+1): now_list = answerKey[start:start+T] print(now_list) nt = nf = 0 for i in now_list: if(i==’T’): nt+=1 else: nf+=1 print(min(nf,nt),k)
if(min(nt,nf) <= k):
max_window = T
print(max_window)
2. 认真的滑动窗口
```python
# 1)右指针滑动,计算窗口内T和F的数量
# 2)如果T和F的数量均大于k,即无法通过修改其中一个字母来使窗口内所有字母相同,需要移动左指针
# 3)左指针移动完毕,此时窗口大小可以作为答案,和当前的最大值比较并更新
right = left = nf = nt = 0
count = 0
#右边界滑动
for right,ans in enumerate(answerKey):
if ans == 'T':
nt += 1
else:
nf +=1
#左边界收缩
while( nt > k and nf > k):
if answerKey[left] == 'T':
nt -= 1
else:
nf -=1
left += 1
count = max(count,right-left+1)
print(count)