424. 替换后的最长重复字符
给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。
注意:字符串长度 和 k 不会超过 104。
思路:双指针,维护两个数组,一个统计当前区域的字母频率,一个维护之前遍历过的区域的变化点,如果当前区域的字母频率不满足题意,则将左指针添加至第二个数组中维护的第一个变化点,直至右指针到末尾
class Solution:
def characterReplacement(self, s: str, k: int) -> int:
l,ans,n = 0,0,len(s)
if (n:=len(s)) == 0:
return ans
count = [0]*26
count[ord(s[0])-ord('A')] = 1
stamp = collections.deque()
for r in range(1,n):
count[ord(s[r])-ord('A')] += 1
judge = r-l+1-max(count)
if s[r]!=s[r-1]:
stamp.append(r)
if judge>k:
for i in range(l,stamp[0]):
count[ord(s[i])-ord('A')] -= 1
l = stamp.popleft()
else:
ans = max(ans,r-l+1)
return ans
时间复杂度O(n)
空间复杂度O(max(K,E)),本题E=26