classSolution:defcharacterReplacement(self, s:str, k:int)->int:
num =[0]*26# 记录每个字符出现的次数
n =len(s)
maxn = left = right =0# 使用右指针right来遍历每个字符while right < n:# 滑窗右指针指向的字符数加一
num[ord(s[right])-ord("A")]+=1# 对于每个访问到的字母ch,更新:重复最多字母出现的次数maxn
maxn =max(maxn, num[ord(s[right])-ord("A")])# 判断若得到当前的最大长度的重复串是否满足条件(最多替换k次)if right - left +1- maxn > k:# 左指针前移一位(左、右指针只能前移或不动)# 左指针对应的字符数也需要减一
num[ord(s[left])-ord("A")]-=1
left +=1
right +=1return right - left # 因为右指针加一了,所以这里不需要多减一
classSolution:defmaxRepOpt1(self, text:str)->int:
cnt = Counter(text)
n =len(text)
ans =0
i =0while i < n:# 先找第1段(第1段必有,因为长度至少为1)
j = i
while j < n and text[j]== text[i]:
j +=1
l = j - i # 第1段长度# 尝试寻找第2段
k = j +1while k < n and text[k]== text[i]:
k +=1
r = k - j -1# 第2段长度(可能为0)# 更新最大值(此时+1表示使用1次交换)
ans =max(ans,min(l + r +1, cnt[text[i]]))
i = j
return ans