题目描述:

image.png

image.png

image.png

题解:

  1. 敷衍的滑动窗口 ```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)

  1. if(min(nt,nf) <= k):
  2. 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)