| 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
 
- }
 
 
  |