Есть только 4 масти, поэтому пространство возможных замен действительно мало - 4! = 24 случая.
В этом случае я не думаю, что это стоит того, чтобы попытаться придумать что-то особенно умное.
Просто проанализируйте строку, например "7A 7B 8A 8B", посчитайте количество различных букв в ней и на основе этого числа сгенерируйте замены на основе предварительно вычисленного набора замен.
1 letter -> 4 possible substitutions c, d, h, or s
2 letters -> 12 substitutions like in Your example.
3 or 4 letters -> 24 substitutions.
Затем отсортируйте набор замен и удалите дубликаты. Вы должны отсортировать токены в каждой строке, например "7c 8d 9d 9s", а затем отсортировать массив строк для обнаружения дубликатов, но это не должно быть проблемой. Хорошо также отсортировать шаблоны типа «7A 7B 8A 8B» (токены типа «7A», «8B» расположены в порядке возрастания).
EDIT:
Альтернативой для сортировки может быть обнаружение идентичных наборов, если ранги связаны с двумя или более мастями, и учет этого при создании замен, но я думаю, что это более сложно. Вам нужно будет создать набор рангов для каждой буквы, появляющейся в строке шаблона.
Например, для строки «7A, 7B, 8A, 8B» с буквой A связан набор {7, 8}, и тот же набор связан с буквой B. Затем необходимо найти идентичные наборы, связанные с разными буквами. В большинстве случаев эти наборы будут иметь только один элемент, но они могут иметь два, как в примере выше. Письма, связанные с одним и тем же набором, являются взаимозаменяемыми. Вы можете иметь следующие ситуации
1 letter no duplicates -> 4 possible substitutions c, d, h, or s
2 letters no duplicates -> 12 substitutions.
2 letters, 2 letters interchangeable (identical sets for both letters) -> 6 substitutions.
3 letters no duplicates -> 24 substitutions.
3 letters, 2 letters interchangeable -> 12 substitutions.
4 letters no duplicates -> 24 substitutions.
4 letters, 2 letters interchangeable -> 12 substitutions.
4 letters, 3 letters interchangeable -> 4 substitutions.
4 letters, 2 pairs of interchangeable letters -> 6 substitutions.
4 letters, 4 letters interchangeable -> 1 substitution.