C# Largest String
static string LargestString(string s)
{
    var chars = s.ToCharArray();
    var len = chars.Length;
    var cur = "";

    for (int i = len - 1; i >= 0; i--)
    {
        cur = chars[i] + cur;

        if (cur.Length == 3)
        {
            if (cur == "abb")
            {
                chars[i] = 'b';
                chars[i + 1] = 'a';
                chars[i + 2] = 'a';

                if (i + 4 < len && chars[i + 4] == 'b')
                {
                    i += 4 + 1;
                }
                else if (i + 3 < len && chars[i + 3] == 'b')
                {
                    i += 3 + 1;
                }
                else if (chars[i + 2] == 'b')
                {
                    i += 2 + 1;
                }
            }

            if (chars[i + 1] == 'b')
            {
                i += 1 + 1;
            }
            else
            {
                i++;
            }
            cur = "";
        }
    }

    return new string(chars);
}

This builds the biggest valid string it can under the challenge rules by always choosing the best next character it is allowed to use.