我有一些像这样的字符串:
'RRSSTT'
'RRRSSSTTT'
'RRRRSSSSTTTT'
etc...
我需要使用此属性提取所有唯一排列:
使用命令perms
,我获得所有排列(如果字符串有6个元素,则排列为720)。
使用uperms
脚本,我获得所有唯一的排列(如果字符串有6个元素,排列是90)。我在mathworks(http://www.mathworks.com/matlabcentral/fileexchange/27321-unique-random-permutations)上找到了uperm
。
直到这里一切正常,但我需要编写/找到一个其他算法来生成具有上述特殊属性的排列。 如果字符串是' RRSSTT'期望的排列必须是15。
有人已经遇到过这个问题,可以帮助我吗?
------ ------ EDIT
有15个等效字符串,一些例子是:
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作为第一个字母的字符串。 抱歉更改了符号。
-----编辑1 -----
我会尝试解释原因
str1='RSTRST'
和
str2='STRSTR'
是等价的。
你必须考虑' R'在str1中用' S替换它,替换' S'用' T'最后' T'与' R'。组中的所有字符串都是正确的,但在每个组中,所有字符串都是等效的,我需要从每个组中只取一个字符串。
正如烧杯所说,角色替换规则并不总是有效,我需要找到合适的角色。
答案 0 :(得分:1)
我认为现在我理解了你的代码,这可以解决它:
uperm
生成一个包含所有可能解决方案的集合。[a]=unique(solution,'stable')
返回的每个解决方案调用uperm
,并仅在返回RST
(或任何固定订单)时接受。