Пример #1
0
        private static string FindMaxMergePair(CharInfo ci, int idx, char[] result, StringChar lastSuccessfulChar)
        {
            if (idx == result.Length)
            {
                return(new string(result));
            }

            string     s = null;
            StringChar lastFailedChar = null;

            while (s == null)
            {
                StringChar sc = ci.RemoveMaxPossibleChar(lastSuccessfulChar, lastFailedChar);
                if (sc == null)
                {
                    return(null);
                }

                result[idx] = sc.c;
                s           = FindMaxMergePair(ci, idx + 1, result, sc);
                if (s == null)
                {
                    lastFailedChar = sc;
                    ci.AddChar(sc);
                }
            }

            return(s);
        }