У меня есть строка, как это:Уникальная перестановка со странными круглыми повторениями
'RRSSTT'
'RRRSSSTTT'
'RRRRSSSSTTTT'
etc...
Мне нужно извлечь все уникальные перестановки с этим свойством:
- «RRSSTT»; «RRTTSS»; «SSRRTT»; «SSTTRR»; «TTRRSS»; «TTSSRR» - это все те же строки, и
- 'RSTRST'; «RTSRTS»; «TSRTSR»; «TRSTRS»; «SRTSRT»; «STRSTR» - это все те же строки.
С командой perms
Получаю все перестановки (если строка имеет 6 элементов, перестановки 720). С помощью скрипта uperms
я получаю всю уникальную перестановку (если строка содержит 6 элементов, перестановки - 90). Я нашел uperm
на mathworks (http://www.mathworks.com/matlabcentral/fileexchange/27321-unique-random-permutations).
До сих пор все работает, но мне нужно написать/найти другой алгоритм, который генерирует перестановки с указанным выше специальным свойством. Если строка «RRSSTT», то требуемые перестановки должны быть 15.
Кто-то уже столкнулся с этой проблемой и мог мне помочь?
------ EDIT ------
Есть 15 goups эквивалентной строки, некоторые из примеров являются:
Group 1: Group 6: Group 11:
'RSTTSR' 'RSTSTR' 'RSSTRT'
'SRTTRS' 'SRTRTS' 'STSRRT'
'STRRTS' 'STRTRS' 'RSRTTS'
'RTSSTR' 'TRSRST' 'STTRSR'
'TRSSRT' 'TSRSRT' 'TRRSTS'
'TSRRST' 'RTSTSR' 'TRTSSR'
Group 2: Group 7: Group 12:
'RSTRST' 'RSSRTT' 'RSSTTR'
'SRTSRT' 'SSTRRT' 'SRRTTS'
'STRSTR' 'RRSTTS' 'STTRRS'
'RTSRTS' 'STTSRR' 'TRRSST'
'TRSTRS' 'TRRTSS' 'TSSRRT'
'TSRTSR' 'TTRSSR' 'RTTSSR'
Group 3: Group 8: Group 13:
'RSTSRT' 'SRRSTT' 'SRSTTR'
'STRSRT' 'SSRTTR' 'SRRTST'
'RSTRTS' 'RRTSST' 'RTRSST'
'STRTSR' 'TSSTRR' 'TSSRTR'
'TRSRTS' 'RTTRSS' 'TSTRRS'
'TRSTSR' 'TTSRRS' 'RTTSRS'
Group 4: Group 9: Group 14:
'SRTRST' 'RSRSTT' 'RRSSTT'
'SRTSTR' 'SSRTRT' 'SSRRTT'
'RTSRST' 'STSTRR' 'SSTTRR'
'TSRSTR' 'RRTSTS' 'RRTTSS'
'RTSTRS' 'TRTRSS' 'TTRRSS'
'TSRTRS' 'TTSRSR' 'TTSSRR'
Group 5: Group 10: Group 15:
'STRRST' 'SRSRTT' 'SRSTRT'
'RSTTRS' 'SSTRTR' 'RSRTST'
'SRTTSR' 'RRSTST' 'STSRTR'
'RTSSRT' 'TSTSRR' 'RTRSTS'
'TRSSTR' 'RTRTSS' 'TSTRSR'
'TSRRTS' 'TTRSRS' 'TRTSRS'
Мне нужно возвращать одну строку для каждой группы, Я предпочитаю строку с буквой R в качестве первой буквы. Извините за изменение нотации.
----- EDIT 1 -----
Я попытаюсь объяснить, почему
str1='RSTRST'
и
str2='STRSTR'
эквивалентны.
Вы должны рассмотреть «R» в str1 и заменить его на «S», заменить «S» на «T» и, наконец, «T» на «R». Все строки в группе правы, но в каждой группе все строки эквивалентны, и мне нужно взять только одну строку из каждой группы.
Как сказал стакан, правило замены персонажей не всегда работает, мне нужно найти правильную роль.
Я действительно не вижу, какие перестановки вы хотите сохранить. Можете ли вы перечислить разрешенные перестановки 'aabbcc''? Или скажите нам правило, которое вы используете для получения перестановок? – beaker
@beaker Я добавил несколько примеров, извините за изменение обозначений. –
Я не понимаю смысл четырех групп. Для одного примера ввода вы можете дать все 15 перестановок, которые вы ожидаете? И некоторые примеры, которые не следует включать в причину (например, не включать ABC, поскольку CDE уже включен) – Daniel