424. 替换后的最长重复字符 - 力扣(LeetCode)
给你一个字符串 s
和一个整数 k
。你可以选择字符串中的任一字符,并将其更改为任何其他大写英文字符。该操作最多可执行 k
次。
在执行上述操作后,返回 包含相同字母的最长子字符串的长度。
问题可以等价为:在一个区间内求最短不同字母的长度不能超过k
因此可以用方法:滑动窗口
设置一个动态的窗口 对区间内的字母数量进行统计 这里可以用collections库中的Counter()进行统计和判断。
cn=Counter()
cn.most_common(1)[0][1] :表示其中最多字母的个数
class Solution:
def characterReplacement(self, s: str, k: int) -> int:
cn=Counter()
l,r=0,0
res=0
for r in range(len(s)):
cn[s[r]]+=1
while r-l+1-cn.most_common(1)[0][1]>k:
cn[s[l]]-=1
l+=1
res=max(res,r-l+1)
return res