Go Largest String
func largestString(s string) string {
b := []byte(s)
length := len(b)
cur := ""
for i := length - 1; i >= 0; i-- {
cur = string(b[i]) + cur
if len(cur) == 3 {
if cur == "abb" {
b[i] = 'b'
b[i+1] = 'a'
b[i+2] = 'a'
if i+4 < length && b[i+4] == 'b' {
i += 4 + 1
} else if i+3 < length && b[i+3] == 'b' {
i += 3 + 1
} else if b[i+2] == 'b' {
i += 2 + 1
}
}
if b[i+1] == 'b' {
i += 1 + 1
} else {
i++
}
cur = ""
}
}
return string(b)
}
This builds the biggest valid string it can under the challenge rules by always choosing the best next character it is allowed to use.