原题连接

给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度

示例 1:

输入:s = “ABAB”, k = 2 输出:4

解释:用两个’A’替换为两个’B',反之亦然。

这题不会,抄下来以后方便以后理解…

golang示例代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
func characterReplacement(s string, k int) int {
	if s == "" {
		return 0
	}
	// 左指针 / 右指针
	left, right := 0, 0
	// 最长长度 / 当前窗口所有字符计数
	maxLen, m := 0, make(map[uint8]int)
	for right = 0; right < len(s); right++ {
		m[s[right]]++
		maxLen = max(maxLen, m[s[right]]) // 当前窗口最多的字符计数
		// 如果窗口无法满足凑成全部一样的字符,滑动左指针
		if right-left+1 > maxLen+k {
			m[s[left]]--
			left++
		}
	}
    // 因为是滑动窗口,最终窗口会会滑动底部。所以这里用len(s)作为右边界
	return len(s) - left
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}