| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | type SegmentTree struct {	tree []int	size int}func newST(n int) SegmentTree {	return SegmentTree{		tree: make([]int, 2*n),		size: n,	}}func (st SegmentTree) add(i, val int) {	i += st.size	st.tree[i] += val	for 1 < i {		j := i / 2		st.tree[j] = maxInt(st.tree[2*j], st.tree[2*j+1])		i = j	}}func maxInt(x, y int) int {	if x < y {		return y	}	return x}func characterReplacement(s string, k int) (max int) {	n := len(s)	if n-1 <= k {		return n	}	bytes := []byte(s)	st := newST(26)	fast, slow, cnt := 0, 0, 0	for ; fast < n; fast++ {		st.add(int(bytes[fast]-'A'), 1)		cnt = st.tree[1]		for cnt+k < fast-slow+1 {			st.add(int(bytes[slow]-'A'), -1)			slow++			cnt = st.tree[1]		}		max = maxInt(max, fast-slow+1)	}	return}
 |