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.